テスト対象のコードは次のとおりです。 view.QueryResultsGridはSystem.Windows.Forms.DataGridViewオブジェクトです: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が私に語りました:プロパティまたはインデクサ 'Presenter.IQueryForm.QueryResults'はgetアクセサーがないためこのコンテキストでは使用できません。しかし、テストでは、モックでアクセサーを取得すると思っていたので、そのメッセージを理解できません。最後に、NUnitは、 'オブジェクト参照がオブジェクトのインスタンスに設定されていません。
ご協力いただきありがとうございます。
アンディ
コードがモックからのDataGridViewを取得し、それにSelectionModeプロパティを設定されてやっていることをよく
感謝を渡します! – Andy