Как я могу предотвратить VerificationException при запуске теста с подключенным отладчиком?

Всякий раз, когда я запускаю любой из следующих модульных тестов с подключенным отладчиком, я получаю 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:

  • Свободная проверка v3.0.0.0
  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v10.0.0.0
  • Система
  • System.Core

Некоторые другие моменты:

Кто-нибудь знает, как я могу предотвратить это VerificationException, обойти его и/или почему это вызвано? Кажется, что с таким количеством сборок не должно быть никаких конфликтующих загрузок. Я также переместил вспомогательные сборки FluentValidation в сторону, но все равно получаю исключение.


person Kit    schedule 27.07.2011    source источник


Ответы (3)


Хорошо, я понял. Сначала я хотел бы отметить Джереми Skinner для работы со мной для воспроизведения проблемы . Его помощь подтолкнула меня к дальнейшей настройке среды.

Чтобы предотвратить эту проблему, вам необходимо отключить IntelliTrace в Visual Studio 2010 Ultimate. , либо необходимо добавить FluentValidation в список модулей, которые IntelliTrace следует исключить из сбора данных. Мои поиски в Интернете показывают, что это ошибка IntelliTrace. Джим Накашима в своем сообщение в блоге говорит:

Проблема заключается в том, что в самой IntelliTrace есть ошибка, из-за которой методы с логическим выходным параметром в сборке, помеченной как SecurityTransparent, завершатся ошибкой, если для коллекции IntelliTrace задано значение «высокий», что является значением по умолчанию в сценарии Cloud IntelliTrace.

Вы увидите это в своем собственном коде, если у вас есть метод, сигнатура которого включает логический выходной параметр, и вы установили для безопасности сборки значение SecurityTransparent.

Я просмотрел свою трассировку стека и кратко просмотрел источник FluentValidation, но не увидел этого. Я подозреваю, что это может быть аналогичная ошибка инструментария IntelliTrace, связанная с выражениями LINQ.

В любом случае, вот как решить проблему:

  1. В VS выберите Отладка | Параметры и настройки... | IntelliTrace | Модули
  2. В следующем диалоговом окне нажмите Добавить... и введите FluentValidation в текстовое поле.

введите здесь описание изображения

person Kit    schedule 29.07.2011
comment
У меня очень похожая проблема, но из Razor выбрасывается исключение, а IntelliTrace у меня нет... Я могу запускать тесты дома, используя VS Pro, но в офисе, все еще используя VS Pro, я получаю исключение. Как вам удалось отследить причину до IntelliTrace? - person Vegar; 23.12.2011
comment
Я не отслеживал это напрямую до IntelliTrace, но предположил, что его инструментарий кода и режим отладки каким-то образом вызывали это. Есть ли что-нибудь в вашем коде инструментария стека технологий (например, профилировщик памяти/производительности, PostSharp и т. д.?) Это может быть одним из тех... - person Kit; 04.01.2012
comment
TypeMock был проблемой в этом случае. Обновление версии решило проблему. Немного пугает, что TypeMock вмешивается без моего ведома. Интересно, что он делает...? - person Vegar; 04.01.2012
comment
Чтобы быть уверенным, что где-то работает IL gen. Создать проверяемый IL, используя, скажем, генерацию отражения, сложно — в прошлом я часто получал InvalidProgramException, когда думал, что поступаю правильно. - person Kit; 04.01.2012
comment
У меня такая же проблема, но это не решает ее. Какие-либо предложения? - person Sam; 17.08.2012

Я столкнулся с той же проблемой и обнаружил, что TypeMock 6.0 является виновником. Отключив TypeMock Isolator (меню TypeMock -> Disable TypeMock Isolator), я избавился от проблемы. Это, конечно, нарушает любой тест, зависящий от TypeMock.

Обратите внимание, что добавление FluentValidation к исключениям IntelliTrace не решает проблему, если проблема заключается в TypeMock.

person larsmoa    schedule 11.12.2012

В моем случае в моем приложении Asp.net MVC 3 была ссылка на файлы FluentValidation.dll и FluentValidation.mvc.dll.

Я удалил ссылки и установил FluentValidation для MVC 3 с помощью диспетчера пакетов nuget, и это сработало.

Он скачал FluentValidation.Mvc версии 5.0.0.1.

person Rahatur    schedule 28.12.2013