Ваши тесты должны убедиться, что код правильно подчиняется бизнес-правилу. Поэтому я бы не стал писать тесты, которые обходят бизнес-правило или полагаются на сам код бизнес-правила. Скорее, когда меняется бизнес-правило, я сначала изменил бы тест, чтобы отразить новое бизнес-правило, затем, когда мой код больше не проходит тест, перейдите и исправьте код, чтобы он прошел тест.
То, чего вы не хотите, это написать свой тест, чтобы при изменении способа применения того же бизнес-правила ваш тест не выполнялся. Это легче сказать, чем сделать, но по сути то, что вы хотите протестировать, - это минимум, необходимый для реализации правила, не требуя слишком узкой реализации кода. Если результат правила отличается, то сначала вы должны изменить тест, а затем код, соответствующий ему.
Вы также не хотите, чтобы тест был связан с конкретными данными. Скажем, при расчете налога ваш тест не должен быть написан, чтобы предположить, что тестируемый класс использует 5% в качестве налога. Вместо этого вы должны написать свой тест, чтобы он содержал процент налога, а затем проверить, что расчет выполнен правильно. Предположительно, у вас будет диапазон значений для тестирования, чтобы убедиться, что значения вне диапазона также будут обнаружены. Одним из результатов этого является то, что у вас будет лучший дизайн, поскольку это поможет вам избежать жестко заданных значений и сделает ваш производственный код более гибким для изменений данных.