我创建了一个具有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。
答案 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
中的类不会与单个测试隔离。您应该注意或补偿哪些内容。