2

他のクラスからの依存関係がほとんどあるクラスをテストしています。これを解決するために、私はモックを使用します。これまでのところ、これは非常にうまく機能しました。

[Test]
public void DataField_Gets_Properly_Created()
{
    // Arrange all those mocks

    _dataField =  new DataField(dependency1, dependency2, dependency3);

    Assert.NotNull(dataField.Id);
    // other assertions ...
}

[Test]
public void DataField_Gets_Properly_Saved()
{
    var entityList = new List<IEntity>();
    var dfId = Guid.NewGuid();

    _dataField.SetValue(true, entityList, dfId);

    Assert.True(_datenFeld.ValueBoolean);
    // other assertions
}

ご覧のとおり、私はこのプライベート_dataField変数を使用しています。ご存知のとおり、最初のテストでデータフィールドを作成できるかどうかを実際にテストします。最初の方法で作成されたばかりの2番目のテストで同じデータフィールドを使用するのは悪いアプローチですか?これはあまりクリーンなコードではないと思います。

私が持っていた2番目のアイデアは、でこのデータフィールドを作成することでした[Setup]。これもあまりきれいではありません。セットアップで作成し、作成できるかどうかを後でテストする必要があるためです。よくわかりません。

その後、実際のクラスをテストするためにデータフィールドのインスタンスを必要とするさらに多くのテストが行​​われる可能性がありますDataField

4

2 に答える 2

4

単体テストは、他の単体テストに依存してはなりません。それぞれを個別に実行して通過させることができ、任意の順序で実行できる必要があります。

この場合、各テストで再初期化するローカル変数を使用することをお勧めしますが、すべてのモックを[Setup]. ヘルパー メソッドなどで初期化をカプセル化できますCreateDataFieldForTest()

于 2012-04-11T15:38:18.200 に答える
3

単体テストは、他の単体テストに依存するべきではありません。

でマークされた関数は、クラス内のすべて[Setup]の関数の前に呼び出されます。したがって、作成物をに移動すると、継続的に再作成されます。それはあなたが確信していないことですか? [Test]_dataField[Setup]

でマークされた関数は[TestFixtureSetUp]、 a の開始時に 1 回呼び出され[TestFixure]ます。したがって、毎回の前に呼び出されることはありません[Test]

[SetUp]
public void TestSetup()
{
   _dataField =  new DataField(dependency1, dependency2, dependency3);
}

[Test]
public void DataField_Gets_Properly_Created()
{
    Assert.NotNull(dataField.Id);
    // other assertions ...
}

[Test]
public void Most_Test_Using_dataField()
{
    ...
}

ここで、適切に「初期化」されていない場合、最初のテストは失敗します。この場合、問題があることがわかり、他のテストが機能することを保証できません。

于 2012-04-11T15:36:57.820 に答える