我试图使用一个基本的SetupFixtureClass被调用在我的每个项目中的解决方案。
我得到了我的抽象类TestFixtureSetupBase,它没有命名空间,位于项目a。
[SetUpFixture]
public abstract class TestFixtureSetupClass
{
[FixtureSetup]
public void init(){myRandomMethod()};
public virtual void myRandomMethod(){};
}
我从项目b中得到了另一个类它继承了这个类,像
[TestFixture]
public class OtherClassOfOtherProject : TestFixtureSetupClass
{
public override void myRandomMethod(){...};
[Test]
public void randomTest(){...}
}
然而,在这个项目中Setup和myRandomMethod都没有被调用。
我需要注意什么才能得到我想要的结果?我似乎满足了单元文档中提到的要求。
编辑/更新:我要做的是:建立我的环境一次,在TestFixtureSetUp。如果它失败了,我希望得到一个很好的异常。因此,我遵循sandshadow在这里展示的一个例子:https://stackoverflow.com/a/23121991/1484047。因此,我将存储异常并将其抛出到每个单独执行的测试的设置中,否则根本不会显示异常(只会有第5个异常)。如"SetUpFixture失败",没有任何解释)。
当我用NUnit 2.6.2运行你的代码时,我得到不同的结果。GUI运行器运行测试失败,并给出以下错误:
ConsoleApplication4.OtherClassOfOtherProject.randomTest:在SetUpFixture上不允许使用TestFixtureSetUp方法
说得通。您的基类TestFixtureSetupClass
具有SetUpFixture
属性,这意味着"该类上有一个标记为SetUp
或TearDown
的方法,应该在此名称空间中的任何其他测试之前/之后运行。"这不是包含具有TestFixtureSetUp
属性的方法的地方,这意味着"在fixture(类)中的任何测试之前运行此方法"。
既然我认为你只是错误地混合属性,你想发生什么?
-
我希望
myRandomMethod
在我的测试名称空间中的任何测试之前被调用一次:[SetUpFixture] public class TestFixtureSetupClass { [SetUp] public void init() { myRandomMethod(); } public virtual void myRandomMethod() { } }
-
我希望
myRandomMethod
在派生类的任何测试之前被调用一次,对于每个派生类:public abstract class TestFixtureSetupClass { [TestFixtureSetUp] public void init() { myRandomMethod(); } public virtual void myRandomMethod() { } }
注意它们的区别:类级属性、abstract
关键字和init
上的属性。
我相信这是resharper单元测试继承的一个副本。第一条注释指出这是一个Resharper的bug,已经在5.1.1版中修复了。