在使用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
似乎没什么用。
对可能导致此问题的任何建议?
答案 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)
在添加Collection
和CollectionDefinition
装饰器之后,我发生了几次,在浏览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;
}
...
答案 6 :(得分:0)
我的两分钱: 查看发布的回复,我检查了以下内容:
但仍然无法正常工作...问题出在哪里?具有定义的类没有public
修饰符(class Definition ...
),而使用该定义的类具有它。
只需将public
添加到定义中,它就像一种魅力。
答案 7 :(得分:0)
就我而言,我没有公开 FixtureClass
[CollectionDefinition(nameof(ApiTestCollection))]
**public** class ApiTestCollection : ICollectionFixture<OpenSchoolApiBroker>
{}