从不同项目(nunit)继承基类的SetupFixture

时间:2014-08-22 11:20:54

标签: c# nunit

我试图在解决方案中的每个项目中使用基本的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失败"没有任何解释)。

2 个答案:

答案 0 :(得分:3)

当我使用NUnit 2.6.2运行代码时,我会得到不同的结果。 GUI运行器无法运行测试并出现此错误:

  

ConsoleApplication4.OtherClassOfOtherProject.randomTest:   SetUpFixture上不允许使用TestFixtureSetUp方法

哪个有道理。您的基类TestFixtureSetupClass具有SetUpFixture attribute,这意味着“此类的标记有SetUpTearDown的方法应在其他任何测试之前/之后运行这个命名空间。“这不是包含TestFixtureSetUp attribute方法的地方,这意味着“在夹具(类)中的任何测试之前运行此方法”

由于我认为你只是错误地混合属性,你想要发生什么?

  1. 我希望在我的测试命名空间中的任何测试之前调用myRandomMethod一次:

    [SetUpFixture]
    public class TestFixtureSetupClass
    {
        [SetUp]
        public void init()
        {
            myRandomMethod();
        }
    
        public virtual void myRandomMethod() { }
    }
    
  2. 对于每个派生类,我希望在派生类的任何测试之前调用myRandomMethod一次:

    public abstract class TestFixtureSetupClass
    {
        [TestFixtureSetUp]
        public void init()
        {
            myRandomMethod();
        }
    
        public virtual void myRandomMethod() { }
    }
    
  3. 请注意差异:类级属性,abstract关键字和init上的属性。

答案 1 :(得分:0)

我认为这是resharper unit test inheritance的副本。第一条评论表明这是一个Resharper错误,已在5.1.1版本中修复。