18

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

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

以下构造函数参数没有匹配的夹具数据: 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
    }
}
4

8 回答 8

25

这是一个愚蠢的错误,我花了一点时间才弄清楚它为什么不起作用:

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

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

于 2015-08-31T21:01:16.933 回答
8

在我的例子中,fixture 和 collection 在一个共享的测试程序集中。我发现 XUnit DI 找不到它。因此,我必须定义一个夹具来继承共享程序集中的这些类,以便在共享功能的同时让它注册到我的测试类中。

于 2017-04-28T18:42:32.170 回答
8

如果您的 Collection 的构造函数抛出错误,也会发生这种情况。您可能需要通过其他方式调试该代码,因为 xUnit 提供的错误消息在这种情况下没有帮助。

于 2018-08-02T22:28:12.700 回答
5

我有同样的错误,但对我来说,问题是我忘了CollectionDefinition上课,public例如

错误的

[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.
}
于 2017-02-15T21:01:17.130 回答
4

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

错误的...

public class DatabaseIntegrationTests
{

正确的...

public class DatabaseIntegrationTests : IClassFixture<DatabaseFixture>
{
于 2016-12-03T19:13:33.160 回答
1

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

于 2017-09-15T13:28:48.447 回答
0

我刚刚遇到了这个问题,我不得不将集合定义放入与测试类相同的命名空间中。不只是同一个组件。

于 2018-09-08T13:38:00.580 回答
0

就我而言,我有两个类库。

Tests.Infrastructure.csproj

Tests.Web.csproj

Database fixture不会注入存储在Tests.Web.csproj. Fixture在第二类库中实现,Tests.Infrastructore.csproj.

我移动了 to 的实现fixtureTests.Web.csproj删除Infrastructure了所有的作品

于 2019-07-12T07:01:15.603 回答