SetupFixture不允许在Resharper

时间:2017-01-26 10:22:50

标签: c# nunit resharper integration-testing

我创建了一个具有SetupFixture属性的类,以便根据集成测试程序集的需要进行一次性设置。

[SetUpFixture]
public static class IntegrationTestsBase
{
    public static IKernel Kernel;

    [SetUp]
    public static void RunBeforeAnyTests()
    {
        Kernel = new StandardKernel();
        if (Kernel == null)
            throw new Exception("Ninject failure on test base startup!");

        Kernel.Load(new ConfigModule());
        Kernel.Load(new RepositoryModule());
    }

    [TearDown]
    public static void RunAfterAnyTests()
    {
        Kernel.Dispose();
    }
}

Resharpers Unit Test Session窗口的分组设置为:Projects和Namespaces。但是,如果我使用此实例类,Resharpers Unit Test Session会说:

  

忽略:测试应该明确运行

甚至尝试使用MsTest runner运行这些测试:

  

结果消息:IntegrationTestsBase是一个抽象类。

我试图将此类包装到命名空间但没有任何更改。如果我逐个运行单个测试,它会被运行,但是我无法从GUI运行它们。

如何解决此问题以便能够运行此程序集中包含的所有测试?

使用NUnit 2.6.4,Resharper 2015.2和VS2015更新1。

1 个答案:

答案 0 :(得分:1)

您的Testclass不需要是静态的,因为它由Testframework实例化,静态类通常无法实例化。

最快的解决方法是从static媒体资源中移除Kernel关键字。

[SetUpFixture]
public class IntegrationTestsBase
{
    public static IKernel Kernel;

    [SetUp]
    public void RunBeforeAnyTests()
    {
        Kernel = new StandardKernel();
        if (Kernel == null)
            throw new Exception("Ninject failure on test base startup!");

        Kernel.Load(new ConfigModule());
        Kernel.Load(new RepositoryModule());
    }

    [TearDown]
    public void RunAfterAnyTests()
    {
        Kernel.Dispose();
    }
}

请记住,您在Kernel中放入的任何内容现在都已共享,因此如果此测试是使用多个线程运行的,则Kernel中的类不会与单个测试隔离。您应该注意或补偿哪些内容。