TL; DR: Нет.
Ваше ожидание должно быть жестким в коде и каким-то образом не рассчитываться, два балла здесь:
- Если вы воссоздаете сложный расчет в своем тесте кода, у вас нет "достаточно глупого" теста, чтобы вы действительно могли убедиться, что результат соответствует ожиданиям
- Если вы используете SUT (Тестируемая система) для генерации вычисленного / ожидаемого значения в тесте, вы все еще не проверяем, что ваши ожидания действительно выполняются.
Я рекомендую всегда ожидать фиксированных значений. Теперь в примере с 1 + 2 = 3
это просто, и вы должны просто написать свой тест таким образом, чтобы вы установили int expected = 3
.
Однако, как вы уже упоминали, это может быть немного более сложная операция, например создание ха sh или что-то в этом роде. В этом случае я рекомендую вам выполнить три шага, чтобы убедиться, что ваша SUT выполняет то, что она должна делать:
- Сгенерировать выходное значение с помощью SUT
- Проверить (например, вручную, в противном случае вы бы сделали это вручную) правильность этого значения
- Если (!) шаг 2 сработает, используйте это значение в качестве фиксированного ожидания в модульном тесте.
Сделайте это пару раз (то есть используйте разные значения ввода / вывода), и вы можете быть чертовски уверены, что ваша SUT делает то, что должна.