2015-08-31 18 views
5

我正在使用xUnit 2.0 collection fixtures在多个不同的测试类之间共享通用数据库设置/拆卸。夹具还提供了一些帮助属性,所以我将它注入到每个测试类中。集合夹具不会注入

我重新创建示例中的文档,但是当我运行测试,它立即失败:

下面的构造函数的参数没有匹配的灯具数据:IntegrationTestFixture夹具

这无论我使用的是xUnit Facts还是Theories,或者我正在使用哪个测试运行器,似乎都会发生。


夹具:

public class IntegrationTestFixture : IDisposable 
{ 
    public IntegrationTestFixture() 
    { 
     // (setup code) 
     this.GeneratedTestName = [randomly generated]; 
    } 

    public void Dispose() 
    { 
     // (teardown code) 
    } 

    public string GeneratedTestName { get; private set; } 
} 

集合定义:

[CollectionDefinition("Live tests")] 
public class IntegrationTestCollection : ICollectionFixture<IntegrationTestFixture> 
{ 
    // Intentionally left blank. 
    // This class only serves as an anchor for CollectionDefinition. 
} 

测试:

[CollectionDefinition("Live tests")] 
public class SomeTests 
{ 
    private readonly IntegrationTestFixture fixture; 

    public SomeTests(IntegrationTestFixture fixture) 
    { 
     this.fixture = fixture; 
    } 

    [Fact] 
    public void MyTestMethod() 
    { 
     // ... test here 
    } 
} 

回答

3

这是一个愚蠢的错误,我花了一点找出原因它不工作:

[CollectionDefinition]继续收集定义类,但[Collection]继续在测试类上。我在自动驾驶仪上,没有注意到这一点。

如果您有多个[CollectionDefinition]属性在不同的类上具有相同的名称,您也会得到此。只用一个!

2

就我而言,我忘了从IClassFixture接口继承...

错了...

public class DatabaseIntegrationTests 
{ 

正确...

public class DatabaseIntegrationTests : IClassFixture<DatabaseFixture> 
{ 
3

我有同样的错误,但对我而言,问题在于我忘了让CollectionDefinitionpublic例如

错误

[CollectionDefinition("Live tests")] 
class IntegrationTestCollection : ICollectionFixture<IntegrationTestFixture> 
{ 
    // Intentionally left blank. 
    // This class only serves as an anchor for CollectionDefinition. 
} 

正确

[CollectionDefinition("Live tests")] 
public class IntegrationTestCollection : ICollectionFixture<IntegrationTestFixture> 
{ 
    // Intentionally left blank. 
    // This class only serves as an anchor for CollectionDefinition. 
} 
3

在我的情况中,固定装置和收集是在一个共享测试组件。我发现XUnit DI找不到它。所以,我必须定义一个在共享程序集中继承这些类的fixture,以便在我的测试类中注册时共享这些功能。

0

我们的许多TestFixture类都有相似的名字。因此,请确保定义上的测试夹具类型与传递到包含测试的类上的构造函数的类型完全匹配。