gpt4 book ai didi

xunit - 使用具有 NSubstitute 自动数据属性的 AutoFixture 时测试丢失

转载 作者:行者123 更新时间:2023-12-03 09:20:58 25 4
gpt4 key购买 nike

按预期发现具有以下测试的测试类:

[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
N替代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!
}

MyBrokenTestMyWorkingTestThatIsNowBrokenAssert.NotNull 处失败,而 MyWorkingTest 通过,尽管它与MyWorkingTestThatIsNowBroken。因此,不仅 AutoNSubstituteData 属性无法正常工作,而且还会导致下游测试行为异常!

更新2:AutoNSubstituteDataAttribute 的定义更改为public 而不是internal 可以修复所有问题。 xunit runner 现在可以像 TestDriven.Net 一样发现并通过所有测试。对这种行为有什么想法吗?是预期的吗?

最佳答案

xUnit Visual Studio 运行程序和 TestDriven.Net 运行程序都会导致这些奇怪的问题,因为 AutoNSubstituteDataAttribute 类和构造函数是内部。将它们更改为 public 可以解决所有问题。如果该属性被忽略,我会收到如下错误:System.InvalidOperationException:找不到...的数据

这并不能解释为什么下游测试会受到来自完全不同测试的违规 AutoNSubstituteData 属性的影响。在这种情况下,单元测试运行器似乎应该更加健壮。

为了完整起见,这里是 AutoNSubstituteDataAttribute 的工作实现:

public class AutoNSubstituteDataAttribute : AutoDataAttribute
{
public AutoNSubstituteDataAttribute()
: base(new Fixture().Customize(new AutoNSubstituteCustomization()))
{
}
}

关于xunit - 使用具有 NSubstitute 自动数据属性的 AutoFixture 时测试丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31279955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com