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变量。你知道的,我实际上是在第一次测试中测试是否可以创建数据字段。在第二个测试中使用相同的数据字段是不是一种不好的方法,它刚刚在第一个方法中创建?我认为这不是很干净的代码。

我的第二个想法是在[Setup]. 这也不是很干净,因为我应该如何在设置中创建它并在之后测试它是否可以创建?我很困惑。

之后可能是更多的测试,它们都需要一个数据字段的实例来测试实际的类DataField

4

2 回答 2

4

单元测试不应依赖于任何其他单元测试。您应该能够单独运行每个并让它们通过,并且您应该能够以任意顺序运行它们。

In this case, I'd recommend using a local variable that you re-initialize in each test, but arrange all the mocks in the [Setup]. You can encapsulate the initialization in a helper method, CreateDataFieldForTest() or similar.

于 2012-04-11T15:38:18.200 回答
3

您的单元测试不应依赖于其他单元测试。

标记为的函数将在类中的每个[Setup]函数之前调用。因此,如果您将创建移动到,它将不断重新创建它。这是你不确定的吗? [Test]_dataField[Setup]

标记为的函数[TestFixtureSetUp]将在 a 的开头调用一次[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 回答