Краткий ответ: «только один макет за тест». неоднозначно. Используйте столько фальшивок, сколько вам нужно, чтобы изолировать тестируемый код от «модуля», который тестирует одно условие.
Следует сформулировать: Тестируйте только одну вещь за тест. Если вы проверяете состояние более одного фиктивного объекта, вы, вероятно, тестируете более одной вещи.
Длинный ответ:
Здесь есть много ответов, чтобы написать модульный тест в соответствии с лучшими практиками, с которыми я сталкивался.
Общая терминология из (Искусство модульного тестирования), которая, я надеюсь, станет общей:
Fake - объект, который изолирует тестируемый код от остальной части приложения.
Заглушка - простой поддельный объект.
Mock - фальшивый объект, который хранит то, что ему передано, и который можно проверить для проверки теста.
Окурки и издевательства - оба типа подделки.
"только один макет за тест." неверно. Вы используете столько фальшивок, сколько вам нужно, чтобы полностью изолировать тестируемый код от остальной части приложения. Если метод не принимает параметров, подделать нечего. Если метод принимает простой тип данных, например int
, string
, который не имеет сложного поведения, вам не нужно его подделывать. Если у вас есть 2 репозитория, контекст, переданный служебный объект, имитируйте их все, поэтому другие производственные методы не вызываются.
Вы должны иметь одно условие на тест , как сказал @Mongus Pong.
Соглашение о тестировании имен: MethodUnderTest_Condition_ExpectedBehaviour
, в этом случае вы не можете этого сделать, поскольку вы прошли более одного испытания условия.
Тестовый образец: Arrange, Act, Assert . Из вашего теста кажется, что это то, что вы сделали, но вы организуете с использованием частных членов. Их следует заменять переменными в каждом тесте, поскольку порядок выполнения тестов не всегда соблюдается, состояние этих переменных не может быть гарантировано, что делает ваши тесты ненадежными.
Купите копию "Искусство юнит-тестирования" http://artofunittesting.com/, она ответит на многие ваши вопросы и будет отличным вложением; одна из книг, которую я бы взял, если загорелся офис.