У меня есть API класса, который имеет полный охват кода и использует DI для измельчения всей логики в основной функции класса (Job.Run), которая выполняет всю работу.NMock2.0 - как заглушить вызов без интерфейса?
Я нашел ошибку в производстве, где мы не сделали некоторые проверки на одном из полей ввода данных.
Итак, я добавил функцию заглушки под названием ValidateFoo() ... Написал единичный тест против этой функции, чтобы ожидать исключения JobFailedException, запустил тест - он потерпел неудачу, очевидно, потому что эта функция была пуста. Я добавил логику проверки, и теперь тест проходит.
Отлично, теперь мы знаем, что валидация работает. Проблема в том, как написать тест, чтобы убедиться, что ValidateFoo() действительно вызван внутри Job.Run()? ValidateFoo() - частный метод класса Job - так что это не интерфейс ...
Есть ли все-таки сделать это с помощью NMock2.0? Я знаю, что TypeMock поддерживает подделки типов без интерфейса. Но изменение mock libs сейчас не вариант. В этот момент, если NMock не сможет его поддерживать, я просто просто добавлю вызов ValidateFoo() к методу Run() и проведу проверку вручную - что, очевидно, я бы предпочел не делать, учитывая, что мой метод Job.Run() 100% покрытие прямо сейчас. Любой совет? Большое спасибо.
EDIT: другой вариант, который я имею в виду, - это просто создать интеграционный тест для моей функции Job.Run (введя в нее истинные реализации составных объектов вместо mocks). Я дам ему плохое входное значение для этого поля, а затем подтвержу, что задание не выполнено. Это работает и охватывает мой тест, но на самом деле это не единичный тест, а вместо этого интеграционный тест, который проверяет один блок функциональности .... hmm ..
EDIT2: Есть ли способ сделать это? У кого-нибудь есть идеи? Может быть, TypeMock - или лучший дизайн?