2009-08-14 2 views
0

테스트중인 코드는 다음과 같습니다.NUnit + Moq Throwing 예외

public void SelectCheckedChanged(object sender, EventArgs e) 
{ 
    view.QueryResultsGrid.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect; 
} 

시험이 시도되고 : 내가 시험 코드 줄에 중단 점을 넣으면

private Mock<IQueryForm> mockWindow; 
private QueryFormPresenter presenter; 

/// <summary> 
/// Runs ONCE prior to any tests running 
/// </summary> 
[TestFixtureSetUp] 
public void TestFixtureSetUp() 
{ 
    //We're interested in testing the QueryFormPresenter class here, but we 
    //don't really care about the QueryForm window (view) since there is hardly any code in it. 
    //Therefore, we create a mock of the QueryForm view, and pass it to the QueryFormPresenter to use. 
    mockWindow = new Mock<IQueryForm>(); 
    presenter = new QueryFormPresenter(mockWindow.Object); 
} 


[Test] 
public void Moq_Is_Hard() 
{ 
    //Arrage 
    DataGridView d = new DataGridView(); 
    mockWindow.SetupGet(x => x.QueryResultsGrid).Returns(d); 

    //Act 
    presenter.SelectCheckedChanged(null, null); 

    //Assert 
    //mockView.VerifyGet(x => x.QueryResultsGrid.SelectionMode, Times.AtMostOnce()); 
    mockWindow.VerifySet(x => x.QueryResultsGrid.SelectionMode, Times.AtMostOnce()); 
} 

은, VS는 저에게 말한다 : view.QueryResultsGrid는 System.Windows.Forms.DataGridView 객체입니다 속성 또는 인덱서 'Presenter.IQueryForm.QueryResults'는 get 접근자가 없기 때문에이 컨텍스트에서 사용할 수 없습니다. 그러나 테스트에서 나는 모의에 Get 접근자를 설정하고 있다고 생각했기 때문에 그 메시지를 이해하지 못합니다. 마지막으로 NUnit은 '객체 참조가 객체의 인스턴스로 설정되지 않음'을 제공합니다.

도움을 주시면 대단히 감사하겠습니다.

앤디

답변

1

그럼 어떤 코드가에서의 selectionMode 속성을 설정 한 후 모의에서 DataGridView를을 받고있다하고있다. DataGridView의 실제 구현은 Mock 컨트롤이 아니므로 SelectionMode에 대한 getter 및 setter를 가로 챌 수 없습니다.

DataGridView가 실제로 Mockable이 아니기 때문에 실제 구현을 반환하고 속성을 스텁하고 그 작업을 수행해야한다는 점이 문제 중 하나입니다. 당신의 도움에 대한

시험은 아래 나를 위해 통과

...

[Test] 
public void SelectCheckedChanged_SetsModeToColumnHeaderSelect() { 
    //Arrange 
    //Mock the form to return a stubbed grid 
    Mock<IQueryForm> form = new Mock<IQueryForm>(); 
    DataGridView grid = new DataGridView(); 
    grid.SelectionMode = DataGridViewSelectionMode.CellSelect; 
    form.SetupGet(f => f.QueryResults).Returns(grid); 
    QueryFormPresenter presenter = new QueryFormPresenter(form.Object); 

    //Act 
    presenter.SelectCheckedChanged(); 

    //Assert 
    form.VerifyGet(f => f.QueryResults); 
    Assert.AreEqual(DataGridViewSelectionMode.ColumnHeaderSelect, 
        grid.SelectionMode); 
} 
+0

감사합니다! – Andy