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

本文关键字:SetupFixture nunit 基类 项目 继承 | 更新日期: 2023-09-27 18:19:02

我试图使用一个基本的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失败",没有任何解释)。

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

当我用NUnit 2.6.2运行你的代码时,我得到不同的结果。GUI运行器运行测试失败,并给出以下错误:

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

说得通。您的基类TestFixtureSetupClass具有SetUpFixture属性,这意味着"该类上有一个标记为SetUpTearDown的方法,应该在此名称空间中的任何其他测试之前/之后运行。"这不是包含具有TestFixtureSetUp属性的方法的地方,这意味着"在fixture(类)中的任何测试之前运行此方法"。

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

  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() { }
    }
    

注意它们的区别:类级属性、abstract关键字和init上的属性。

我相信这是resharper单元测试继承的一个副本。第一条注释指出这是一个Resharper的bug,已经在5.1.1版中修复了。