我在想测试的对象是否应该是一个字段,因此在SetUp
方法中设置(例如JUnit,nUnit,MS Test等)。
考虑以下示例(这是使用MsTest的C♯示例,但对于任何其他语言和测试框架来说,思路应该是类似的):
public class SomeStuff
{
public string Value { get; private set; }
public SomeStuff(string value)
{
this.Value = value;
}
}
[TestClass]
public class SomeStuffTestWithSetUp
{
private string value;
private SomeStuff someStuff;
[TestInitialize]
public void MyTestInitialize()
{
this.value = Guid.NewGuid().ToString();
this.someStuff = new SomeStuff(this.value);
}
[TestCleanup]
public void MyTestCleanup()
{
this.someStuff = null;
this.value = string.Empty;
}
[TestMethod]
public void TestGetValue()
{
Assert.AreEqual(this.value, this.someStuff.Value);
}
}
[TestClass]
public class SomeStuffTestWithoutSetup
{
[TestMethod]
public void TestGetValue()
{
string value = Guid.NewGuid().ToString();
SomeStuff someStuff = new SomeStuff(value);
Assert.AreEqual(value, someStuff.Value);
}
}
当然,只有一个测试方法的第一个示例太长了,但是随着更多的测试方法,这可能会减少一些冗余代码。
每种方法的优缺点是什么?有没有“最佳实践”?