未调用基于单元测试的类中的ClassInitialize属性

Phi*_*hil 42 c# vs-unit-testing-framework

我在TestBase类中添加了这些方法:

[ClassInitialize]
public static void InitializBeforeAllTests()
{
}
Run Code Online (Sandbox Code Playgroud)

但是当我在Debug中运行一个单元测试Test1():

[TestClass]
public class TestMapping : TestBase
{
    [TestMethod]
    public void Test1()
    {
    }
Run Code Online (Sandbox Code Playgroud)

TestBase.InitializBeforeAllTests()永远不会调用该方法.为什么?

Sha*_*ian 13

在方法上声明ClassInitialize属性时,该方法必须是static,public,void,并且应该采用TestContext类型的单个参数.

如果您在同一单元测试中使用了AssemblyInitialize属性的其他方法,则测试将运行,但将跳过所有测试方法,并将直接转到AssemblyCleanup或只是退出.

尝试在MSDN中的ClassInitialize属性上的示例.


Ron*_*nny 10

我知道这是一个非常古老的问题,但在寻找类似问题时,它是第一个在谷歌搜索中弹出的问题,无论如何,这里是答案的更新:

 [ClassInitialize(InheritanceBehavior.BeforeEachDerivedClass)]
 public static void YOUR_INIT_METHOD_NAME(TestContext context)
Run Code Online (Sandbox Code Playgroud)

注意:您需要 MSTest.TestFramework-Version 2.0.0 包或更高版本才能正常工作。


Pau*_*ick 8

无论出于何种原因,单元测试框架的UnitTestExecuter只允许为每个测试类定义一个ClassInitialize和一个ClassCleanup方法......不像TestInitialize和TestCleanup方法,它们在派生和基础测试类中被调用......


Jam*_*ruk 8

您可以在基类中设置程序集初始化方法.与ClassInitialize不完全相同,但它是一个可行的选择.来源:此处提到的解决方法.

[TestClass]
public abstract class TestBase
{
    [AssemblyInitializeAttribute]
    public static void Initialize(TestContext context)
    {
        // put your initialize code here
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以添加清理方法:

[AssemblyCleanup]
public static void Cleanup()
{
   //clean up stuff here
}
Run Code Online (Sandbox Code Playgroud)