我试图在解决方案中的每个项目中使用基本的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。
我需要做些什么才能获得理想的结果?我似乎满足了nunit-documentation.
中提到的要求编辑/更新:我尝试做的是:在TestFixtureSetUp中构建我的环境一次。它失败了,我想得到一个很好的例外。因此,我按照sandshadow所示的示例进行了操作:https://stackoverflow.com/a/23121991/1484047。因此,我存储异常并将其放入每个执行的测试的设置中,否则将不会显示任何异常(只有s.th.喜欢" SetUpFixture失败"没有任何解释)。
答案 0 :(得分:3)
当我使用NUnit 2.6.2运行代码时,我会得到不同的结果。 GUI运行器无法运行测试并出现此错误:
ConsoleApplication4.OtherClassOfOtherProject.randomTest: SetUpFixture上不允许使用TestFixtureSetUp方法
哪个有道理。您的基类TestFixtureSetupClass
具有SetUpFixture
attribute,这意味着“此类的标记有SetUp
或TearDown
的方法应在其他任何测试之前/之后运行这个命名空间。“这不是包含TestFixtureSetUp
attribute方法的地方,这意味着“在夹具(类)中的任何测试之前运行此方法”
由于我认为你只是错误地混合属性,你想要发生什么?
我希望在我的测试命名空间中的任何测试之前调用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
上的属性。
答案 1 :(得分:0)
我认为这是resharper unit test inheritance的副本。第一条评论表明这是一个Resharper错误,已在5.1.1版本中修复。