【问题标题】:Is it possible to access to a SetUpFixture outside the projet?是否可以在项目外访问 SetUpFixture?
【发布时间】:2020-04-10 08:55:51
【问题描述】:

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

所以我的测试结构是这样的:

  • 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 方法。

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

提前致谢。

【问题讨论】:

  • 您可以在此处尝试SetupFixture 属性,根据GitHub 任何命名空间之外的SetUpFixture 为整个程序集提供SetUp 和TearDown。 它应该可以工作,如果Project.Domain.Tests 和 Project.App.Tests 位于一个程序集中
  • 好像和命名空间有关,rest 看起来不错
  • 我对 assembly 部分没有太多关注,我误解并认为它是对命名空间的引用。我认为我遇到的问题与此有关,我会尝试将它们放在同一个程序集中进行解决。

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


【解决方案1】:

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

当然,一个程序集可以引用另一个程序集,但 NUnit 只会搜索您告诉它运行的程序集是否存在 SetUpFixtureAttribute 等属性。

如果代码很简单,最简单的解决方法是在每个程序集中复制它。如果它很复杂,那么我建议将您的初始化代码放在一个由两个测试程序集引用的公共程序集中。那么这两个SetUpFixtures 可以简化为一个调用。

另一个问题是并行性。如果您的两个设置装置会相互干扰,请确保您不要告诉 VS 并行运行这两个进程。

【讨论】:

  • 关键是 NUnit 在程序集中寻找 SetUpFixtures。
猜你喜欢
  • 2016-05-12
  • 2019-07-08
  • 1970-01-01
  • 2013-07-21
  • 2013-01-29
  • 1970-01-01
  • 2016-10-06
  • 2020-09-05
  • 1970-01-01
相关资源
最近更新 更多