我向自己提出的问题(以及现在对整个世界,甚至可能超出)的问题,在我的评论中如下:
[TestMethod()]
public void SetMessageTypeSubcodeTest()
{
int AMessageTypeSubcode;
// Should I put this class instantiation in MyTestInitialize?
MessageClass target = new MessageClass();
. . .
我应该这样做:
[TestInitialize()]
public void MyTestInitialize()
{
MessageClass target = new MessageClass();
}
......或者这个:
[ClassInitialize()]
public void MyTestInitialize()
{
MessageClass target = new MessageClass();
}
......或两者都没有?
由于C#/ .NET是垃圾收集的,所以不需要在TestCleanup()或ClassCleanup()方法中释放MessageClass,是吗?
答案 0 :(得分:3)
您希望在集合中测试每次测试的全新班级实例。这将防止任何可能的副作用(可能发生),并因此测试(应该单位,分开)相互影响。
答案 1 :(得分:2)
除非建造课程费用昂贵,否则每次测试都要做。保证你有一个干净的石板。你是对的,你也不需要在测试结束时进行任何清理,除非你正在测试的具体东西需要它(数据库连接关闭,关闭web协议的握手等)
答案 2 :(得分:1)
这个问题没有真正的“正确”答案。就个人而言,鉴于您的代码,我不会将该类实例化放入任何类型的设置方法中。我会将其保留在每个测试中,以使测试更具可读性和完整性。
我认为使用ClassInitialize或TestInitialize方法的正确时间是您希望为该类中的所有测试创建单个一致的环境。这也是我不喜欢“每个系统类的单一测试类”方法的原因。每个测试类都是一个为其测试提供一致环境的工具。
过度激进的重构测试代码将每个“new Foo()”移动到TestFixture中将导致奇妙的因素,但难以阅读单元测试。对于测试,我重视在该因子分析水平上的可读性。