TypeMock 6.0.4.0 ведет себя по-разному на разных боксах - PullRequest
0 голосов
/ 06 декабря 2011

Help!

Этот код отлично работает на моем локальном VS2010 с TypeMock, но не работает на нашем сервере сборки при запуске через NCover.

Мой код:

 using (RecordExpectations expect = RecorderManager.StartRecording())
    {
74:             RequestDataLayer.GetAllUsers();
75:             expect.Return(DatabaseUsers);
                // other definitions to follow
    }

Выводит эту ошибку в среде CruiseControl.Net:

Execute
TypeMock.TypeMockException: 
*** Cannot use Return in this sequence, there must be a mocked statement first
Perhaps you are trying to mock a method from mscorlib
   at TypeMock.RecordExpectations.b(String A_0)
   at TypeMock.RecordExpectations.a(String A_0)
   at TypeMock.RecordExpectations.Return(Object returnValue)
   at Request.UserSyncTest.SyncData() in UserSyncTest.cs:line 75

Источник метода, который я пытаюсь смоделировать:

public class RequestDataLayer
{
        public static User[] GetAllUsers()
        {
            // some LINQ magic to get users out of DB, then a .ToArray()
            // returns an object array
        }
}

Так что в этом нет ничего особенногоПомимо того, что метод является статическим.С тех пор я реорганизовал метод, чтобы сделать его нестатическим, эффекты внизу этой страницы.

Ранее у меня была похожая проблема, связанная с использованием синтаксиса Isolate <> TypeMock, я столкнулся сВ том же сценарии тесты работают нормально локально (через Gallio Test Runner), но не на сервере сборки (CC.Net, Gallio, TypeMock, NCover).

Я использую 6.0.4.0 TypeMock на обоихdev и build box.

Также, похоже, сработало перемещение строк 74 и 75 вниз в блоке RecordExpectations - ошибка не показывалась, НО вызов метода просто не подвергался насмешке.

Идеи приветствуются.

Ответы [ 3 ]

4 голосов
/ 07 декабря 2011

Когда я вижу такие вещи, обычно:

  • Порядок тестов - тесты выполняются в одном порядке на блоке разработки, но в другом порядке на сборочном блоке, что выявляет проблемы, такие как некоторые приборы не очищаются должным образом после себя.
  • Различия среды - такие вещи, как среда разработки, выполняющая 32-разрядную сборку, но сервер сборки, выполняющий 64-разрядную сборку.

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

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

Если у вас есть возможность, обновитесь до последней версии. С каждым выпуском Typemock все лучше и лучше справляется с этими странными проблемами, и проблема может исправиться с более поздним выпуском.

0 голосов
/ 07 декабря 2011

Хорошо, мы выяснили, в чем проблема - достаточно смущающе, что TypeMock неправильно вызывался через скрипт NAnt.

Это все еще загадка, однако, почему мы не просто увидели сообщение об ошибке «TypeMock», но это странное поведение вместо этого.

0 голосов
/ 07 декабря 2011

Отказ от ответственности Я работаю в Typemock.

Используете ли вы атрибут ClearMocks в методе тестирования или классе тестирования?
Если вы используете атрибут и все еще получаете исключение, пожалуйста, свяжитесь с нашей службой поддержки:
поддержка на typemock.com

...