这个问题是关于在Visual Studio中使用MSTest进行单元测试的(这一点很重要,因为MSTest是execution order).标记为[TestInitialize]的方法和测试类构造函数都将在每个测试方法之前运行.
所以,问题是,你倾向于在这些领域中的每一个领域做些什么?你是否避免在这两个地方进行某些活动?你的理由是什么:风格,技术,还是迷信?
这个问题是关于在Visual Studio中使用MSTest进行单元测试的(这一点很重要,因为MSTest是execution order).标记为[TestInitialize]的方法和测试类构造函数都将在每个测试方法之前运行.
所以,问题是,你倾向于在这些领域中的每一个领域做些什么?你是否避免在这两个地方进行某些活动?你的理由是什么:风格,技术,还是迷信?
构造函数只是语言提供的一种 struct .每个测试框架似乎都有自己的受控生命周期"初始化".使用构造函数来变异局部变量只会给你带来麻烦.
MSTest:每TestMethod
个测试类就有一个全新的实例.这可能是唯一一种可以在构造函数、初始值设定项或测试方法中变异局部变量而不影响其他测试方法的情况.
public class TestsForWhatever
{
public TestsForWhatever()
{
// You get one of these per test method, yay!
}
[TestInitialize]
public void Initialize()
{
// and one of these too!
}
[TestMethod]
public void AssertItDoesSomething() { }
[TestMethod]
public void AssertItDoesSomethingElse() { }
}
您的所有断言只得到一个Establish
和Because
(It
).所以,不要在你的断言中改变你的当地人.并且不依赖于基本上下文中局部变量的Mutations (如果您使用它们的话).
[Subject(typeof(Whatever))]
public class When_doing_whatever
{
Establish context = () =>
{
// one of these for all your Its
};
Because of = () => _subject.DoWhatever();
It should_do_something;
It should_do_something_else;
}