Любопытная проблема с NUnit и Typemock - PullRequest
1 голос
/ 21 июля 2011

Использование VS 2010, NUnit, Typemock, Entity Framework ...

У меня возникла странная проблема с использованием NUnit / Typemock.Я относительно новичок в мире тестирования, так что это может быть ошибкой новичка.Это проблема, с которой я сталкиваюсь.

  • Тестовый проект скомпилирован.
  • Запуск NUnit из Visual Studio
  • Запуск тестов из клиентского приложения NUnit.Первый запуск, первый тест всегда завершается неудачей.
  • Повторный запуск и тестирование проходит.

Не имеет значения, какой тест первый.Я могу выбрать конкретный тест.Если он запускается первым, произойдет сбой при первом выполненииОн перезапускается.

Это пример класса, в котором возникла проблема.Но класс не имеет значения.Какой бы тест ни выполнялся первым, возникает эта проблема.Код исключения был просто чем-то, что должно было проверить загрузку Typemock.Сбой при вызове WhenCalled.

[TestClass, Isolated]
public class FirstTest
{

    [TestMethod]
    public void TestMe()
    {
        Exception e = new TypeMock.ArrangeActAssert.NestedCallException();
        Isolate.WhenCalled(() => UnitOfWorkManager.GetCurrentSession(null)).WillReturn(null);
        Assert.IsTrue(true);
    }
}

Ниже приводится сообщение об ошибке.


HCSO.ESL.Test.Fakes.FirstTest.TestMe: TypeMock.ArrangeActAssert.NestedCallException: * WhenCalled не поддерживает использование вызова свойства в качестве аргумента.- Чтобы исправить этот проход ложным вместо AssemblyReader.IsDotNetFile


  • Пример - это будет работать:
  • Аргумент MyObj = Something.Other (). GetStuff ();
  • Isolate.WhenCalled (() => ObjUnderTest.MethodUnderTest (аргумент)) ...;


  • Пример - это не будет работать:

  • Isolate.WhenCalled (() => ObjUnderTest.MethodUnderTest (Something.Other (). GetStuff ())) ...;

(конец сообщения об ошибке)


У кого-нибудь есть идея, почему первый тест всегда дает сбой, но при повторном запуске работает нормально?Что-то с тем, как загружаются сборки?

(Правка) Дополнительные сведения:


Версии: Typemock Isolator: 6.0.10.0 Visual Studio: 10.0.30319.1

Кроме того, я добавил упрощенный тестовый код.Таким образом, вы можете увидеть тестируемый код.И да, этот тест не пройден в первый раз, после этого проходит каждый прогон.

[TestClass, Isolated]
public class FirstTest
{

    public static int DummyCall(int i)
    {
        return 0;
    }

    [TestMethod]
    public void TestMe()
    {
        Exception e = new TypeMock.ArrangeActAssert.NestedCallException();
        //Isolate.WhenCalled(() => UnitOfWorkManager.GetCurrentSession(null)).WillReturn(null);
        Isolate.WhenCalled(() => FirstTest.DummyCall(-1)).WillReturn(1);
        Assert.IsTrue(true);
    }
}

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Я решил проблему. Как я и ожидал, это было частично ошибкой новичка. Внутри NUnit есть настройка, чтобы определить, как сборка изолирована. Опция по умолчанию - запускать тесты в том же процессе, что и NUnit. Я попытался изменить изоляцию в отдельном процессе для каждой сборки, и проблема исчезла.

Воспроизвести ошибку. * Убедитесь, что выбран параметр NUnit для «Запускать тесты непосредственно в процессе NUnit». * Закрыть NUnit (просто чтобы убедиться, что настройка используется) * Запустите NUnit изнутри VS. * Выберите тест, содержащий Isolate.WhenCalled () * Сначала запустите этот тест.

Спасибо за помощь.

[РЕДАКТИРОВАТЬ: Обновление] Обновление в случае, если кто-то еще имеет эту проблему.

Я обнаружил, что в клиенте NUnit, если я установил следующие параметры, все отлично работает.

В настройках: Загрузчик тестов -> Изоляция сборки -> Модель процесса по умолчанию -> Запуск теста непосредственно в процессе NUnit .

Тестовый загрузчик -> Изоляция сборки -> Использование домена по умолчанию -> Использование отдельного домена приложений для каждой сборки

2 голосов
/ 21 июля 2011

Я работаю в Typemock,

Это кажется очень странным, поскольку это определенно не вложенный вызов по внешнему виду. Не могли бы вы попробовать и напишите нам небольшое решение, демонстрирующее проблему на support@typemock.com?

Что такое UnitOfWorkManager? Это класс, принадлежащий EF, или это ваш код?

Кроме того, какую версию Isolator вы используете?

...