【问题标题】:Inheritance of SetupFixture of a base class from different projects (nunit)来自不同项目的基类SetupFixture的继承(nunit)
【发布时间】:2014-08-22 22:21:08
【问题描述】:

我正在尝试使用一个基本的 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。所以我会存储异常并将其抛出到每个执行的测试的设置中,否则根本不会显示任何异常(只会出现诸如“SetUpFixture failed”之类的东西而没有任何解释)。

【问题讨论】:

  • 您是否从命令行运行测试?有什么论据?
  • 我正在使用 ReSharper 运行它们 - 没有命令,只有基本的调试功能
  • 嗯,这不仅是一个 resharper 问题,因为我们的构建服务器没有使用 resharper,我们也遇到了同样的问题
  • 您的构建服务器使用什么?最好在问题中提供这些细节。 NUnit 本身支持这一点,其他运行器可能有错误。需要理解的是,有许多 runner 实现,每个都有自己的怪癖。
  • 根据您的编辑,听起来您正在尝试做的事情已在链接的答案中得到回答。那个答案不清楚呢?

标签: c# nunit


【解决方案1】:

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

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

这是有道理的。你的基类TestFixtureSetupClassSetUpFixture 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() { }
    }
    

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

【讨论】:

  • 谢谢!我真正想要做的是由 sandshadow 在这里显示:stackoverflow.com/a/23121991/1484047 - 我想为我的命名空间设置一次常见的东西,如果失败,应该在设置中提及。
  • 我有点困惑,因为我在两个小时前完全尝试了这种构造“TestFixtureSetUp”和“SetUp”并且效果很好 - 我的异常被抛出在 testFixtureSetUp 并且每次 SetUp 时都会引发叫。但是,我无法重现它:
【解决方案2】:

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

【讨论】:

  • 正如我在评论中提到的:我已经看到了你建议的链接,不,它不是重复的。我正在使用较新的版本,所以如果它与我的问题有关,则不应该发生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多