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

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

Ответы [ 3 ]

12 голосов
/ 29 июля 2011

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

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

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

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

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

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

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

enter image description here

1 голос
/ 11 декабря 2012

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

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

0 голосов
/ 28 декабря 2013

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

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

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

...