是否可以在项目外部访问SetUpFixture?

时间:2019-12-17 19:58:37

标签: c# visual-studio unit-testing nunit nunit-3.0

我正在为项目的两层编写一些单元测试,在第一层中,我有一个包含领域特定逻辑的类库,第二层是应用程序。

所以我的测试结构如下:

  • Project.App.Tests(单元测试项目)
    • TestClass1
    • ...
    • TestClassN
  • Project.Domain.Tests(单元测试项目)
    • TestClass1
    • ...
    • TestClassN

我正在使用NUnit 3及其适配器在Visual Studio 2015中运行测试。

我需要为两个项目都初始化一个LocalDb(出于一些不值得一提的原因)。所以我添加了一个看起来像这样的SetUpFixture:

namespace Project
{
    [SetUpFixture]
    public class SetUpFixture
    {
        [OneTimeSetUp]
        public void Initialize() { ... }
    }
}

因为我最初是域项目所需的,所以此文件位于Project.Domain.Tests项目中,因此 Project.Domain.Tests 项目下的测试很容易到达 OneTimeSetUp 方法,但问题出在 Project.App.Tests ,它们从未达到 SetUpFixture OneTimeSetUp 方法。 >

我缺少任何配置吗?还是我实现它的方式不支持它?

谢谢。

1 个答案:

答案 0 :(得分:0)

使用SetUpFixture的说明假定所有内容都在一个程序集中。程序集每次运行一次,并且只有在进行引用后才能相互引用。

当然,一个程序集可以引用另一个程序集,但是NUnit仅在您告诉其运行的程序集中搜索诸如SetUpFixtureAttribute之类的属性。

如果代码很简单,最简单的解决方法是在每个程序集中复制它。如果很复杂,建议将初始化代码放在两个测试程序集都引用的通用程序集中。然后,可以将两个SetUpFixture减少为一个呼叫。

进一步的关注是并行性。如果您的两个安装夹具相互干扰,那么请确保您不告诉VS并行运行这两个进程。