我一直在努力争取这个,希望它能帮助别人。
在使用MsTest创建单元测试时,我发现我在每个测试中重复相同的代码,并找到了几个方便的属性(TestInitialize
,TestCleanup
,ClassInitialize
和{{ 1}})。
据推测,当您使用这些属性之一标记方法时,它应该自动执行(在每次测试之前,在每次测试之后,在所有测试之前,以及在所有测试之后)。令人沮丧的是,这没有发生,我的测试失败了。如果从标有ClassCleanup
属性的类中直接调用这些方法,则测试成功。显然他们并没有自己执行。
以下是我使用的一些示例代码:
TestMethod
那为什么不执行?
答案 0 :(得分:96)
诀窍是制作这些方法public
:
[TestInitialize()]
public void Setup()
{
_factory = new Factory();
_factory.Start();
}
当它们private
时,它们不会执行。
答案 1 :(得分:10)
TestInitialize和TestCleanup在所有测试之前和之后运行,而不是在每个测试之前和之后运行。
这是错误的,请参阅此链接: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf
另见MSDN
示例代码显示了如何使用TestInitialize,ClassInitialize和AssemblyInitialize。
答案 2 :(得分:1)
我也遇到了问题 - 由于我对如何调用方法的误解 - 解决了这个问题:让你的测试继承自包含TestInitialize和TestCleanup方法的类。