在xunit中组合类固定装置和收集装置

时间:2017-01-20 15:56:45

标签: c# testing protractor xunit end-to-end

为了在xunit中运行Protractor端到端测试,我想在xunit中组合Class Fixtures and Collection Fixtures
我创建了一个集合夹具DatabaseServerFixture[Collection]来运行数据库和服务器,因此数据库和Web服务始终可用于所有测试,并且数据库/服务器设置只对所有测试执行一次,以便更快地执行。
我已经设置了第二个BrowserFixture以在一个类中的所有测试之间共享一个浏览器实例,因为我希望能够并行运行来自不同类的测试,每个类都拥有它自己的浏览器类。

问题是:我需要引用要在我的测试类中使用的BrowserFixture,因此我无法引用DatabaseServerFixture。由于DatabaseServerFixture从未被引用,因此未创建=>没有数据库,因此所有测试都失败了。

我不需要能够从我的测试中访问DatabaseServerFixture,但我需要在所有测试之前启动它。我如何让xunit启动它,即使似乎我没有在任何地方使用它?

我尝试创建一个使用DatabaseServerFixture的虚拟测试,但它没有为其他测试运行,所以它没有帮助。

1 个答案:

答案 0 :(得分:2)

我有一个类似的需求,因为类夹具需要来自收集夹具的信息来进行初始化这一事实使情况变得复杂。尽管我找不到在xUnit中记录的文档,但是似乎依赖项注入可以很好地处理这种情况。我能够使其按如下方式工作(以您的班级为例):

public class BrowserFixture: IDisposable {
  public BrowserFixture(DatabaseServerFixture dbFixture) {
     // BrowserFixture initialization with dbFixture dependencies.
  }
  public void Dispose(){}
}

[Collection("DatabaseServerFixtureCollection")]
public void BrowserTests: IClassFixture<BrowserFixture> {
   public BrowserTests(
      DatabaseServerFixture dbFixture, 
      BrowserFixture browserFixture) {
      // BrowserTests initialization here. 
   }
}

这类似于MickaëlDerriey提到的内容,但是在DatabaseServerFixture中另外注入了BrowserFixture,我发现这是一个常见的用例。希望这会有所帮助!