6

デバッガーを接続して次の単体テストのいずれかを実行すると、この時点で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
  • システム
  • System.Core

他のいくつかのポイント:

  • デバッガーなしでテストを実行すると正常に機能します
  • コードカバレッジがオフになっている
  • 参照されるアセンブリを最小限に最小化しました
  • Fusionログにエラーは表示されません
  • SecurityRulesAttribute答えから同様の質問に適用してみました
  • 私はVerificationExceptionとテストに関するブログ投稿からいくつかのことを試しました
  • MSTestホストとResharperホストの両方で発生します(共通のスレッドは「デバッガーの下」にあるように見えるため、NUnitを試していません。
  • 管理者または非管理者としてVSを実行しているときに発生します

誰かが私がこれを防ぐ方法、それを回避する方法VerificationException、および/またはそれが引き起こされている理由を知っていますか?アセンブリが非常に少ないように思われるので、競合するアセンブリがロードされてはなりません。また、FluentValidation衛星アセンブリを邪魔にならない場所に移動しましたが、それでも例外が発生します。

4

3 に答える 3

12

わかりました、わかりました。まず、問題を再現するために協力してくれたJeremySkinnerに 感謝します。彼の助けは、私の環境をさらに微調整することに私を駆り立てました。

この問題を防ぐには、Visual Studio 2010 UltimateでIntelliTraceを無効にするか、IntelliTraceがデータの収集から除外するモジュールのリストにFluentValidationを追加する必要があります。私のウェブ検索は、それがIntelliTraceのバグであることを示しているようです。ブログ投稿のジム・ナカシマは次のように述べています。

問題は、IntelliTraceコレクションにCloud IntelliTraceシナリオのデフォルトである「high」に設定されている場合、SecurityTransparentとしてマークされたアセンブリにブール値のoutパラメーターを持つメソッドが失敗するというバグがIntelliTrace自体にあることです。

シグニチャにブール値のoutパラメータが含まれるメソッドがあり、アセンブリのセキュリティをSecurityTransparentに設定している場合は、これが独自のコードに表示されます。

スタックトレースを確認し、FluentValidationソースを簡単に確認しましたが、これは表示されませんでした。LINQ式に関連する同様のIntelliTraceインストルメンテーションバグである可能性があります。

とにかく、問題を修正する方法は次のとおりです。

  1. VSで、[デバッグ]、[デバッグ]の順に選択します。オプションと設定... | IntelliTrace | モジュール
  2. 次のダイアログで、[追加... ]をクリックし、テキストボックスにFluentValidationと入力します。

ここに画像の説明を入力してください

于 2011-07-29T14:58:34.993 に答える
1

同じ問題が発生し、TypeMock6.0が原因であることがわかりました。TypeMock Isolatorを無効にすることで(メニューTypeMock-> TypeMock Isolatorを無効にする)、問題を取り除きました。もちろん、これはTypeMockに依存するテストを破ります。

TypeMockが問題である場合、IntelliTrace例外にFluentValidationを追加しても問題は解決しないことに注意してください。

于 2012-12-11T10:20:47.110 に答える
0

私の場合、Asp.netMVC3アプリケーションにはFluentValidation.dllファイルとFluentValidation.mvc.dllファイルへの参照がありました。

参照を削除し、nugetパッケージマネージャーを使用してMVC 3のFluentValidationをインストールしましたが、機能しました。

FluentValidation.Mvcバージョン5.0.0.1をダウンロードしました

于 2013-12-28T15:44:27.287 に答える