Xunit以下构造函数参数没有匹配的fixture数据

时间:2016-09-11 21:45:29

标签: .net xunit

在使用xunit for .NET 1.0 framework net46时,我一直收到此错误。

The following constructor parameters did not have matching fixture data

我看过这篇文章:Collection fixture won't inject并按照此处所述的关于收集夹具的说明进行了密切关注:

http://xunit.github.io/docs/shared-context.html#collection-fixture

似乎没什么用。

对可能导致此问题的任何建议?

8 个答案:

答案 0 :(得分:9)

在我的情况下,事实证明是按照说明做正确的事情。我错误地用

注释了这个班级
 [Collection("ProjectCollection")]

而不是:

 [Collection("ActorProjectCollection")]

我必须说,如果错误消息更明确地暗示了什么是错误的话,XUnit的依赖注入机制将会大大改进。

答案 1 :(得分:2)

另一个可能失败的情况是,如果Cust_ID StartDate EndDate GapInDays 1 2003-10-14 2006-11-07 NULL 1 2006-11-09 2011-06-15 2 1 2011-08-22 2012-10-23 68 2 2008-11-09 2015-06-15 NULL 2 2015-08-22 2017-10-23 68 2 2017-10-26 2019-10-23 3 是在执行测试程序集之外的类型上定义的。该属性本身需要在其内部定义,否则xUnit不会选择它。

答案 2 :(得分:1)

当我的设备类的构造函数由于其他一些问题而失败时(在我的情况下是连接到本地Mongo服务器),可能会出现此异常。

要么寻找其他故障,然后首先解决这些故障,要么减轻构造函数的负担,以减少故障。

答案 3 :(得分:1)

就我而言,我必须在测试类上实现IClassFixture <>接口。

public class MyTests : IClassFixture<QueryTestFixture>

将QueryTestFixture移到另一个项目后,Class属性停止工作

[Collection("QueryCollection")]

哪些链接与Fixture类中的实现(请参见下文)

[CollectionDefinition("QueryCollection")]
public class QueryCollection : ICollectionFixture<QueryTestFixture> { }

我尝试了许多其他方法来解决此问题,但最终reading the xunit.net explanation about shared context.提供了解决方案。

答案 4 :(得分:0)

在添加CollectionCollectionDefinition装饰器之后,我发生了几次,在浏览Internet时,我总是能得到这个答案。

但是在我的情况下,问题在于似乎需要先进行“清洁解决方案” 操作,然后再测试其是否有效。如果不清洗解决方案,我总是会遇到The following constructor parameters did not have matching fixture data错误。

所以,我也写这个答案以帮助我未来的自己。


无论如何,为了避免Nikola Schou解释的问题,您始终可以使用常量来避免名称不匹配:

public static class Collections
{
    public const string ActorProjectCollection= "ActorProjectCollection";
}

-

[Collection(Collections.ActorProjectCollection)]
/// ...

-

[CollectionDefinition(Collections.ActorProjectCollection)]
/// ...

答案 5 :(得分:0)

在相同名称空间中的定义

  [CollectionDefinition("Integration Tests", DisableParallelization = true)]
    public class TestCollection : ICollectionFixture<WebApplicationFactory<Startup>>
    {
        // This class has no code, and is never created. Its purpose is simply
        // to be the place to apply [CollectionDefinition] and all the
        // ICollectionFixture<> interfaces.
    }

在同一名称空间中使用

    [Collection("Integration Tests")]
    public class BasicControllerTests
    {
        private readonly WebApplicationFactory<Startup> _factory;

        public BasicControllerTests(WebApplicationFactory<Startup> factory)
        {
            _factory = factory;
        }

 ...

source

答案 6 :(得分:0)

我的两分钱: 查看发布的回复,我检查了以下内容:

  • CollectionDefinition(X)和Collection(X)类在同一程序集中
  • 定义和使用它的类都引用相同的集合名称
  • 使用该定义的类具有接收灯具的构造函数

但仍然无法正常工作...问题出在哪里?具有定义的类没有public修饰符(class Definition ...),而使用该定义的类具有它。

只需将public添加到定义中,它就像一种魅力。

答案 7 :(得分:0)

就我而言,我没有公开 FixtureClass

   [CollectionDefinition(nameof(ApiTestCollection))]
    **public** class ApiTestCollection : ICollectionFixture<OpenSchoolApiBroker>
    {}