每当我在附加调试器的情况下运行以下任一单元测试时,此时我都会得到一个VerificationException
内部FluentValidation代码(如有必要,稍后将发布整个堆栈跟踪):
at FluentValidation.Resources.LocalizedStringSource.CreateFromExpression(Expression`1 expression, IResourceAccessorBuilder resourceProviderSelectionStrategy)
in ...\FluentValidation\Resources\LocalizedStringSource.cs:line 66
测试是:
using FluentValidation;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var c = new MyClass();
var v = new MyValidator();
v.Validate(c);
}
[TestMethod]
public void TestMethod2()
{
Exception ex = null;
var done = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(
o =>
{
try
{
TestMethod1();
}
catch (Exception e)
{
ex = e;
}
finally
{
done.Set();
}
});
done.WaitOne();
Assert.IsNull(ex);
}
}
public class MyValidator : AbstractValidator<MyClass>
{
public MyValidator()
{
RuleFor(c => c.MyProperty).GreaterThan(0);
}
}
public class MyClass
{
public int MyProperty { get; set; }
}
我在单一解决方案、单一项目方案中仅引用了这些程序集,针对 4.0.30319 运行时:
- FluentValidation v3.0.0.0
- Microsoft.VisualStudio.QualityTools.UnitTestFramework v10.0.0.0
- 系统
- 系统核心
其他几点:
- 在没有调试器的情况下运行测试工作正常
- 代码覆盖已关闭
- 我已将引用的程序集降至最低
- 我在 Fusion 日志中看不到任何错误
- 我尝试将
SecurityRulesAttribute
答案应用于类似问题 - 我在VerificationException 和测试的博客文章中尝试了一些东西
- 在 MSTest 和 Resharper 主机下都发生(没有尝试过 NUnit,因为公共线程似乎在“调试器下”。
- 以管理员或非管理员身份运行 VS 时发生
有谁知道我可以如何防止这种情况VerificationException
,解决它,和/或为什么会导致它?似乎只有这么少的程序集,不应该加载任何冲突的程序集。我还将 FluentValidation 附属程序集移开,但仍然出现异常。