未调用基于unit testing的类中的ClassInitialize属性
我在TestBase类中添加了这些方法:
[ClassInitialize] public static void InitializBeforeAllTests() { }
但是当我运行debugging一个unit testingTest1()
:
[TestClass] public class TestMapping : TestBase { [TestMethod] public void Test1() { }
TestBase.InitializBeforeAllTests()
方法永远不会被调用。 为什么?
在方法上声明ClassInitialize属性时,方法必须是static,public,void, 并且应该接受一个types为TestContext的参数 。
如果在同一个unit testing中也有其他方法的AssemblyInitialize属性,testing将会运行,但会跳过所有的testing方法,直接进入AssemblyCleanup或者直接退出。
尝试MSDN中ClassInitialize属性的示例。
无论出于何种原因,unit testing框架的UnitTestExecuter只允许为每个testing类定义一个ClassInitialize和一个ClassCleanup方法…不像TestInitialize和TestCleanup方法,它们在派生和基本testing类中都被调用…
你可以在你的基类中设置一个程序集初始化方法。 与ClassInitialize不太一样,但它是一个可行的选项。 来源: 这里提到的解决方法。
[TestClass] public abstract class TestBase { [AssemblyInitializeAttribute] public static void Initialize(TestContext context) { // put your initialize code here } }
您也可以添加一个清理方法:
[AssemblyCleanup] public static void Cleanup() { //clean up stuff here }
MS链接不再工作。 无论如何,解决此问题的一种方法是简单地将初始化代码移到基类的构造函数中。 这将确保它在被实例化时从任何后代类被调用。
[TestClass] public class TestBase { public TestBase() { // Initialization Code } } [TestClass] public class TestMapping : TestBase { [TestMethod] public void Test1() { // At this point the base constructor should have been called } }