C# 使用附加的调试器运行测试时,如何防止VerificationException?
每当我在附加了调试器的情况下运行以下任何一个单元测试时,我都会在此时得到一个C# 使用附加的调试器运行测试时,如何防止VerificationException?,c#,debugging,exception,fluentvalidation,intellitrace,C#,Debugging,Exception,Fluentvalidation,Intellitrace,每当我在附加了调试器的情况下运行以下任何一个单元测试时,我都会在此时得到一个VerificationException内部代码(如有必要,稍后将发布整个stacktrace): 测试包括: using FluentValidation; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class UnitTest1 { [TestMethod] public void TestMeth
VerificationException
内部代码(如有必要,稍后将发布整个stacktrace):
测试包括:
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; }
}
使用FluentValidation;
使用Microsoft.VisualStudio.TestTools.UnitTesting;
[测试类]
公共类UnitTest1
{
[测试方法]
公共void TestMethod1()
{
var c=新的MyClass();
var v=新的MyValidator();
v、 验证(c);
}
[测试方法]
公共void TestMethod2()
{
异常ex=null;
var done=新手动重置事件(错误);
ThreadPool.QueueUserWorkItem(
o=>
{
尝试
{
TestMethod1();
}
捕获(例外e)
{
ex=e;
}
最后
{
完成。Set();
}
});
完成。WaitOne();
Assert.IsNull(ex);
}
}
公共类MyValidator:AbstractValidator
{
公共MyValidator()
{
(c=>c.MyProperty).greater大于(0);
}
}
公共类MyClass
{
公共int MyProperty{get;set;}
}
我在单个解决方案、单个项目场景中仅引用了这些程序集,目标是4.0.30319运行时:
- FluentValidation v3.0.0.0
- Microsoft.VisualStudio.QualityTools.UnitTestFramework v10.0.0.0
- 系统
- 系统核心
- 在没有调试器的情况下运行测试可以正常工作
- 代码覆盖率已关闭
- 我已将引用的程序集最小化到最小值
- 我在融合日志中没有看到任何错误
- 我尝试从
- 我试着从上一篇博文中找到一些东西
- 在MSTest和Resharper主机下发生(尚未尝试NUnit,因为公共线程似乎处于“调试器下”)
- 以管理员或非管理员身份运行VS时发生
有人知道我如何防止这个
VerificationException
,解决它,和/或它的原因吗?看起来程序集太少了,加载时不应该有任何冲突。我也将FluentValidation附属程序集移到一边,但仍然会出现异常。好的,我知道了。首先我想他帮助我尝试进一步调整我的环境
为了防止出现此问题,您必须在Visual Studio 2010 Ultimate中禁用,或者必须将IntelliTrace从收集数据中排除的模块添加到模块列表中。我的web搜索似乎表明这是IntelliTrace错误。他说:
问题在于IntelliTrace本身存在一个bug,当IntelliTrace集合设置为“高”(这是云IntelliTrace场景中的默认值)时,在标记为SecurityTransparent的程序集中具有布尔输出参数的方法将失败
如果您有一个签名包含boolean out参数的方法,并且您已经将程序集安全性设置为SecurityTransparent,那么您将在自己的代码中看到这一点
我查看了我的堆栈跟踪并简要浏览了FluentValidation源代码,但没有看到这一点。我怀疑这可能是与LINQ表达式相关的类似IntelliTrace检测错误
无论如何,以下是解决问题的方法:
我也遇到了同样的问题,发现TypeMock 6.0是罪魁祸首。通过禁用TypeMock隔离器(菜单TypeMock->Disable TypeMock Isolator),我解决了这个问题。这当然打破了任何依赖TypeMock的测试
请注意,当TypeMock出现问题时,向IntelliTrace异常添加FluentValidation并不能解决问题。在我的例子中,我的Asp.net MVC 3应用程序引用了FluentValidation.dll和FluentValidation.MVC.dll文件 我删除了引用,并使用nuget package manager安装了MVC 3的FluentValidation,它成功了
它下载了FluentValidation.Mvc 5.0.0.1版我有一个非常类似的问题,但异常是从Razor引发的,我没有IntelliTrace…我可以在家中使用VS Pro运行测试,但在办公室,仍然使用VS Pro,我得到异常。你是如何设法将原因跟踪到IntelliTrace的?我没有直接跟踪到IntelliTracelliTrace,但推断其代码检测和调试模式是某种原因。您的技术堆栈中是否有任何东西检测代码(例如内存/性能分析器、PostSharp等)这可能是其中的一个…TypeMock是这个案例中的问题。版本升级解决了这个问题。TypeMock在我不知道的情况下进行干扰有点可怕。我想知道它是做什么的…?确定它在某处做IL-gen。创建可验证的IL使用,比如反射发射,是很困难的——我经常在t当我认为我做了正确的事情时,他过去了。我也有同样的问题,但这并不能解决它。有什么建议吗?
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; }
}