0

私はすべてのテストで同じコントローラー インスタンスを使用していますが、(私のテストは任意の順序で実行されるため) 引数なしで呼び出すと、以前の呼び出しで作成されたものController.Viewと同じものが返されることがわかりました。 !ViewDataDictionaryController.View

簡単な例 (NUnit と MvcContrib を使用)

<Test()> _
Public Sub Test_A()
    Dim r As ViewResult = MockController.MethodWhichReturnsViewData().AssertViewRendered()

    Assert.IsNotNull(r.Model)
End Sub

<Test()> _
Public Sub Test_B()
    Dim r As ViewResult = MockController.MethodWhichDoesNotReturnViewData().AssertViewRendered()

    Assert.IsNull(r.Model) '<==== fails, has the same view data as Test_A!
End Sub

これは私のテストにとっては悪いことです (明らかに)。2つの解決策を想像できますが、どちらも好きではありません。何か提案はありますか? (ボーナスとして、MS がこのように設計した理由を誰でも理解できますか?)

  1. Nothingへのすべての空の呼び出しのモデルとして明示的に指定します。Controller.View
  2. TestSetUpモデルをクリアするメソッドを追加
4

2 に答える 2

2

単体テストごとに SUT (Subject Under Test) の新しいインスタンスを作成していることを確認してください。NUnit では、[Setup]属性で装飾されたメソッド内で実行されます。

<Setup()> _
Public Sub Init()
    ' Instantiate the SUT here
    MockController = ...
End Sub

静的フィールドは使用しないでください。MockControllerテスト フィクスチャ クラスのプライベート インスタンス フィールドである必要があります。

于 2012-09-10T10:37:46.167 に答える
0

私は、実際の Web アプリケーション (つまり、テスト モックではない) では、リクエストごとに個別のコントローラー インスタンスが作成されると考えています。したがって、テストではおそらく同じことを行う必要があります。

于 2012-09-10T10:37:50.877 に答える