我正在测试一个类,它与其他类有很多依赖关系。要解决这个问题,我使用模拟器。到目前为止,这非常有效。
[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
。
答案 0 :(得分:4)
单元测试不应该依赖于任何其他单元测试。你应该能够单独运行每一个并让它们通过,你应该能够以任意顺序运行它们。
在这种情况下,我建议您使用在每次测试中重新初始化的局部变量,但是要安排[Setup]
中的所有模拟。您可以将初始化封装在辅助方法CreateDataFieldForTest()
或类似方法中。
答案 1 :(得分:3)
您的单元测试不应依赖于其他单元测试。
标有[Setup]
的功能将在您班级的每个 [Test]
功能之前调用。因此,如果您将_dataField
创建移动到[Setup]
,它将不断重新创建它。这是你不确定的吗?
标有[TestFixtureSetUp]
的功能将在[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()
{
...
}
如果未正确“初始化”,第一次测试将失败。在这种情况下,您将知道存在问题并且无法保证其他测试可以正常工作。