Во-первых, если возможно, я бы порекомендовал перейти на последнюю версию Typemock Isolator, на которую у вас есть лицензия.Каждая выходящая версия, даже незначительные версии, содержит исправления для интересных крайних случаев, которые иногда заставляют вещи работать по-другому.Я обнаружил, что обновление иногда исправляет некоторые вещи.
Далее, я вижу эту строку в вашем модульном тесте:
Isolate.WhenCalled(() => validator.ValidateNewQuestionForExistingQuestionPool(new QuestionViewModel())).WillReturn(new Validation(true));
Красный флаг для меня - это "new QuestionViewModel ()", который находится внутриблок «WhenCalled ()».
Два хороших эмпирических правила, которым я всегда следую:
- Не помещайте в WhenCalled () ничего, что не нужно подвергать насмешкам.
- Если вас не интересуют аргументы, не передавайте реальные аргументы.
В этом случае первое правило заставляет меня думать: «Мне не нужен конструктордля насмешки QuestionViewModel, поэтому я не должен вставлять его туда. "
Второе правило заставляет меня задуматься, действительно ли аргумент метода" ValidateNewQuestionForExistingPool "не важен.В этом случае это не так, поэтому я бы пропустил null, а не реальный объект.Если есть какая-то перегрузка, на которую вы специально обращаете внимание, сначала приведите значение NULL.
Наконец, в некотором роде, исходя из этого первого правила, я обычно стараюсь не указывать свои возвращаемые значения.Это означает, что я бы создал новый объект Validation перед вызовом Isolate.
var validation = new Validator(true);
Isolate.WhenCalled(() => validator.ValidateNewQuestionForExistingQuestionPool(null)).WillReturn(validation);
Попробуйте, посмотрите, как он работает.Вы также можете посмотреть в утилите Typemock Tracer, чтобы увидеть, что настраивается с ожиданием, когда вы запускаете тест, чтобы убедиться, что не устанавливаются дополнительные ожидания, что вы не ... ожидаете .