带有 NUnit AutoMoq 的 AutoFixture 阻止了 运行 的测试
AutoFixture with NUnit AutoMoq prevents tests from running
更新:
AutoFixture 团队 released a fix 在版本 3.51 中对此进行了处理。
只需扩展 AutoDataAttribute
这样做:
public class AutoDataFixedNameAttribute : AutoDataAttribute
{
public AutoDataFixedNameAttribute()
{
this.TestMethodBuilder = new FixedNameTestMethodBuilder();
}
}
然后在您的 NUnit 测试中使用这个新属性而不是内置 AutoData
。
从 v4 开始,此行为是默认行为。
上一个post
我正在尝试将 AutoFixture 与 NUnit 和 Moq 结合使用,使用以下 AutoMoqDataAttribute:
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
但是当我运行这个测试时:
[Test, AutoMoqData]
public void Test(Mock<IUser> user)
{
// do stuff with user
}
测试从未 运行s。 AutomMoqData 被正确命中,但测试中的代码从未执行,一切都结束了 ,没有任何警告,并显示以下消息:
Test adapter sent back a result for an unknown test case. Ignoring result for 'Test(Mock<Sandbox.IUser>)'
测试也没有出现在测试 运行ner 列表中。
但是如果我删除参数:
[Test, AutoMoqData]
public void Test()
{
// do stuff without user
}
一切运行都很好,但是如果没有传递参数,这就没那么有用了:)
我是不是漏掉了什么?
这是 Nuget 包版本的列表:
<package id="AutoFixture" version="3.50.2" targetFramework="net452" />
<package id="AutoFixture.AutoMoq" version="3.50.2" targetFramework="net452" />
<package id="AutoFixture.NUnit3" version="3.50.2" targetFramework="net452" />
<package id="Moq" version="4.5.3" targetFramework="net452" />
<package id="NUnit" version="3.7.1" targetFramework="net452" />
编辑:
按照@MarkSeemann 的建议,我 filed an issue on Github.
Visual Studio 测试运行程序重现
这看起来像是 NUnit Visual Studio 测试适配器的问题。当我还将 NUnit3TestAdapter 包添加到我的重现解决方案时,我可以重现该问题。
我还假设测试 class 具有 [TestFixture]
属性,因此整个重现 class 看起来像这样:
[TestFixture]
public class Tests
{
[Test, AutoMoqData]
public void Test(Mock<IUser> user)
{
Assert.NotNull(user);
}
}
当我尝试 运行 使用 Visual Studio 2015 年的测试 运行ner 进行所有测试时,测试从未 运行s,这是测试输出的输出 window:
------ Run test started ------
NUnit Adapter 3.7.0.0: Test execution started
Running all tests in C:\Users\mark\Documents\Stack Overflow564377564377\bin\Debug\Ploeh.Whosebug.Q44564377.dll
NUnit3TestExecutor converted 1 of 1 NUnit test cases
NUnit Adapter 3.7.0.0: Test execution complete
Test adapter sent back a result for an unknown test case. Ignoring result for 'Test(Mock<Ploeh.Whosebug.Q44564377.IUser:8e33>)'.
========== Run test finished: 0 run (0:00:01,1763498) ==========
TestDriven.Net
如果,另一方面,我尝试 运行 它与 TestDriven.Net,它 运行 就好了:
------ Test started: Assembly: Ploeh.Whosebug.Q44564377.dll ------
1 passed, 0 failed, 0 skipped, took 0,79 seconds (NUnit 3.7.1).
TestDriven.Net 有时对测试代码中的小错误格外宽容,所以这本身可能并不能说明问题。
NUnit 3 控制台 运行ner
由于 TestDriven.Net 接受的内容可能过于宽松,更好的测试是尝试使用 official NUnit 3 console runner:
$ packages/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe 44564377/bin/Debug/Ploeh.Whosebug.Q44564377.dll
NUnit Console Runner 3.6.1
Copyright (C) 2017 Charlie Poole
Runtime Environment
OS Version: Microsoft Windows NT 10.0.15063.0
CLR Version: 4.0.30319.42000
Test Files
44564377/bin/Debug/Ploeh.Whosebug.Q44564377.dll
Run Settings
DisposeRunners: True
WorkDirectory: C:\Users\mark\Documents\Stack Overflow564377
ImageRuntimeVersion: 4.0.30319
ImageTargetFrameworkName: .NETFramework,Version=v4.6.1
ImageRequiresX86: False
ImageRequiresDefaultAppDomainAssemblyResolver: False
NumberOfTestWorkers: 4
Test Run Summary
Overall result: Passed
Test Count: 1, Passed: 1, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
Start time: 2017-06-15 11:09:21Z
End time: 2017-06-15 11:09:22Z
Duration: 0.933 seconds
Results (nunit3) saved as TestResult.xml
这也成功执行了测试。
临时结论
由于官方控制台 运行ner 和 TestDriven.Net 都成功执行了测试,我初步断定这看起来像是 NUnit3TestAdapter 包中的一个缺陷。我可以建议为它提交一个问题吗?
更新: AutoFixture 团队 released a fix 在版本 3.51 中对此进行了处理。
只需扩展 AutoDataAttribute
这样做:
public class AutoDataFixedNameAttribute : AutoDataAttribute
{
public AutoDataFixedNameAttribute()
{
this.TestMethodBuilder = new FixedNameTestMethodBuilder();
}
}
然后在您的 NUnit 测试中使用这个新属性而不是内置 AutoData
。
从 v4 开始,此行为是默认行为。
上一个post
我正在尝试将 AutoFixture 与 NUnit 和 Moq 结合使用,使用以下 AutoMoqDataAttribute:
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
但是当我运行这个测试时:
[Test, AutoMoqData]
public void Test(Mock<IUser> user)
{
// do stuff with user
}
测试从未 运行s。 AutomMoqData 被正确命中,但测试中的代码从未执行,一切都结束了 ,没有任何警告,并显示以下消息:
Test adapter sent back a result for an unknown test case. Ignoring result for 'Test(Mock<Sandbox.IUser>)'
测试也没有出现在测试 运行ner 列表中。
但是如果我删除参数:
[Test, AutoMoqData]
public void Test()
{
// do stuff without user
}
一切运行都很好,但是如果没有传递参数,这就没那么有用了:)
我是不是漏掉了什么?
这是 Nuget 包版本的列表:
<package id="AutoFixture" version="3.50.2" targetFramework="net452" />
<package id="AutoFixture.AutoMoq" version="3.50.2" targetFramework="net452" />
<package id="AutoFixture.NUnit3" version="3.50.2" targetFramework="net452" />
<package id="Moq" version="4.5.3" targetFramework="net452" />
<package id="NUnit" version="3.7.1" targetFramework="net452" />
编辑: 按照@MarkSeemann 的建议,我 filed an issue on Github.
Visual Studio 测试运行程序重现
这看起来像是 NUnit Visual Studio 测试适配器的问题。当我还将 NUnit3TestAdapter 包添加到我的重现解决方案时,我可以重现该问题。
我还假设测试 class 具有 [TestFixture]
属性,因此整个重现 class 看起来像这样:
[TestFixture]
public class Tests
{
[Test, AutoMoqData]
public void Test(Mock<IUser> user)
{
Assert.NotNull(user);
}
}
当我尝试 运行 使用 Visual Studio 2015 年的测试 运行ner 进行所有测试时,测试从未 运行s,这是测试输出的输出 window:
------ Run test started ------
NUnit Adapter 3.7.0.0: Test execution started
Running all tests in C:\Users\mark\Documents\Stack Overflow564377564377\bin\Debug\Ploeh.Whosebug.Q44564377.dll
NUnit3TestExecutor converted 1 of 1 NUnit test cases
NUnit Adapter 3.7.0.0: Test execution complete
Test adapter sent back a result for an unknown test case. Ignoring result for 'Test(Mock<Ploeh.Whosebug.Q44564377.IUser:8e33>)'.
========== Run test finished: 0 run (0:00:01,1763498) ==========
TestDriven.Net
如果,另一方面,我尝试 运行 它与 TestDriven.Net,它 运行 就好了:
------ Test started: Assembly: Ploeh.Whosebug.Q44564377.dll ------
1 passed, 0 failed, 0 skipped, took 0,79 seconds (NUnit 3.7.1).
TestDriven.Net 有时对测试代码中的小错误格外宽容,所以这本身可能并不能说明问题。
NUnit 3 控制台 运行ner
由于 TestDriven.Net 接受的内容可能过于宽松,更好的测试是尝试使用 official NUnit 3 console runner:
$ packages/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe 44564377/bin/Debug/Ploeh.Whosebug.Q44564377.dll
NUnit Console Runner 3.6.1
Copyright (C) 2017 Charlie Poole
Runtime Environment
OS Version: Microsoft Windows NT 10.0.15063.0
CLR Version: 4.0.30319.42000
Test Files
44564377/bin/Debug/Ploeh.Whosebug.Q44564377.dll
Run Settings
DisposeRunners: True
WorkDirectory: C:\Users\mark\Documents\Stack Overflow564377
ImageRuntimeVersion: 4.0.30319
ImageTargetFrameworkName: .NETFramework,Version=v4.6.1
ImageRequiresX86: False
ImageRequiresDefaultAppDomainAssemblyResolver: False
NumberOfTestWorkers: 4
Test Run Summary
Overall result: Passed
Test Count: 1, Passed: 1, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
Start time: 2017-06-15 11:09:21Z
End time: 2017-06-15 11:09:22Z
Duration: 0.933 seconds
Results (nunit3) saved as TestResult.xml
这也成功执行了测试。
临时结论
由于官方控制台 运行ner 和 TestDriven.Net 都成功执行了测试,我初步断定这看起来像是 NUnit3TestAdapter 包中的一个缺陷。我可以建议为它提交一个问题吗?