gpt4 book ai didi

c# - 使用附加调试器运行测试时如何防止 VerificationException?

转载 作者:太空狗 更新时间:2023-10-29 21:02:46 27 4
gpt4 key购买 nike

每当我在附加调试器的情况下运行以下任一单元测试时,我都会在 FluentValidation 中得到一个 VerificationException此时的代码(如有必要,稍后将发布整个堆栈跟踪):

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 日志中没有看到任何错误
  • 我尝试应用 answer to a similar question 中的 SecurityRulesAttribute
  • 我在 VerificationException and testing 上的博客文章中尝试了一些东西
  • 在 MSTest 和 Resharper 主机下发生(没有尝试过 NUnit,因为公共(public)线程似乎在“调试器下”。
  • 以管理员或非管理员身份运行 VS 时发生

有谁知道如何防止此 VerificationException、解决它和/或为什么会导致它?似乎程序集很少,不应该有任何冲突的加载。我还移开了 FluentValidation 附属程序集,但仍然出现异常。

最佳答案

好的,我知道了。首先我要感谢 Jeremy Skinner对于 working with me重现问题。他的帮助促使我尝试进一步调整我的环境。

为防止出现此问题,您要么必须禁用 IntelliTrace在 Visual Studio 2010 Ultimate 中,或者您必须添加 FluentValidation添加到 IntelliTrace 应从收集数据中排除的模块列表。我的网络搜索似乎表明这是一个 IntelliTrace 错误。 Jim Nakashima在他的 blog post说:

The issue is that IntelliTrace itself has a bug where methods that have a boolean out parameter in an assembly that is marked as SecurityTransparent will fail when IntelliTrace collection is set to “high” which is the default in the Cloud IntelliTrace scenario.

You will see this in your own code if you have a method whose signature includes a boolean out parameter and you have set your assembly security to SecurityTransparent.

我查看了我的堆栈跟踪并简要地浏览了 FluentValidation 源代码,但没有看到这一点。我怀疑这可能是与 LINQ 表达式相关的类似 IntelliTrace 检测错误。

无论如何,这是解决问题的方法:

  1. 在 VS 中,选择调试 | 选项和设置... | 智能追踪 | 模块
  2. 在接下来的对话框中,点击添加...,然后在文本框中输入 FluentValidation。

enter image description here

关于c# - 使用附加调试器运行测试时如何防止 VerificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6845439/

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