【发布时间】:2015-07-07 21:50:42
【问题描述】:
按预期发现具有以下测试的测试类:
[Theory]
[AutoData]
public void MyDiscoveredTest() { }
但是,缺少以下测试:
[Theory]
[AutoNSubstituteData]
public void MyMissingTest() { }
有趣的是,如果我把MyDiscoveredTest 放在 MyMissingTest 之后,那么MyDiscoveredTest 现在也不见了。我已经尝试了 xUnit Visual Studio 运行程序和 xUnit 控制台运行程序,结果相同。
我的AutoNSubstituteData 属性在这里定义:
internal class AutoNSubstituteDataAttribute : AutoDataAttribute
{
internal AutoNSubstituteDataAttribute()
: base(new Fixture().Customize(new AutoNSubstituteCustomization()))
{
}
}
一个相关问题:由于上面的AutoNSubstituteDataAttribute 似乎是一个相当常见的属性,我想知道为什么它不包含在 AutoFixture.AutoNSubstitute 中。同样有用的是InlineAutoNSubstituteDataAttribute。我应该为这些提交拉取请求吗?
使用的 Nuget 包版本:
自动夹具 3.30.8
AutoFixture.Xunit2 3.30.8
AutoFixture.AutoNSubstitute 3.30.8
xunit 2.0.0
xunit.runner.visualstudio 2.0.0
xunit.runner.console 2.0.0
NSubstitute 1.8.2.0
我正在使用 Visual Studio 2013 Update 4 并针对 .NET 4.5.1 Framework
更新: 按照建议,我尝试了 TestDriven.NET-3.9.2897 Beta 2。缺少的测试现在运行,但似乎仍然存在一些错误。新示例:
[Theory]
[AutoData]
public void MyWorkingTest(string s)
{
Assert.NotNull(s); // Pass
}
[Theory]
[AutoNSubstituteData]
public void MyBrokenTest(string s)
{
Assert.NotNull(s); // Fail
}
[Theory]
[AutoData]
public void MyWorkingTestThatIsNowBroken(string s)
{
Assert.NotNull(s); // Fail even though identical to MyWorkingTest above!
}
MyBrokenTest 和 MyWorkingTestThatIsNowBroken 在 Assert.NotNull 处失败,而 MyWorkingTest 则通过,即使它与 MyWorkingTestThatIsNowBroken 相同。因此,AutoNSubstituteData 属性不仅不能正常工作,还会导致下游测试行为不端!
更新 2: 将 AutoNSubstituteDataAttribute 的定义更改为 public 而不是 internal 可以解决所有问题。 xunit runner 现在可以像 TestDriven.Net 一样发现并通过所有测试。对这种行为有任何想法吗?是预期的吗?
【问题讨论】:
-
这看起来像一个测试运行错误。您可以尝试使用TestDriven.Net 运行测试吗?
-
虽然
Inline/AutoNSubstituteData看起来很常见,但自动模拟 Glue 库都没有引用 AutoFixture.Xunit,因此无法执行拉取请求。 – 即使自动模拟 Glue 库引用 AutoFixture.Xunit,该属性也没有多大意义,因为在大多数情况下,您最终会在AutoDataAttribute派生类型中组合多个 AutoFixture 自定义。 -
@NikosBaxevanis 感谢您的解释。
Inline/AutoNSubstituteData的实现非常简单,所以我自己实现也没什么大不了的。顺便说一句,我在尝试 TestDriven.Net 后更新了问题;似乎有些东西仍然无法正常工作。会不会是 xUnit 的问题? -
以上所有测试都在我的机器上通过以下 NuGet 包:
AutoFixture.Xunit2、AutoFixture.AutoNSubstitute和xunit。你能尝试一个空的类库项目吗? -
很公平。但是,如果该属性被忽略,我预计会出现这样的错误:
System.InvalidOperationException : No data found for.. 此外,没有解释为什么下游测试会受到来自完全不同测试的有问题的AutoNSubstituteData属性的影响。在这种情况下,跑步者似乎应该更健壮一些。感谢您的回复!
标签: xunit autofixture nsubstitute