Описание: При написании тестов мы могли бы перейти в режим расчета. Мы могли бы вычислить или рассчитать длинные значения. Не делайте этого, это может запутать читателя в отношении бизнес-логики.

Обсуждение

Вы пишете тесты для читателя, не для компьютера. Ведь кто-нибудь потом будет в ближайшие десять лет спрашивать себя - “Черт возьми, что же имел ввиду этот парень?”. Вы бы хотели оставить как можно больше подсказок, особенно если этот расстроенный читатель будете вы.

Например, если мы конвертируем одну валюту в другую, мы берем 1.5% от транзакции. Если курс обмена валют USD -> GBP равен 2:1, тогда если мы меняем 100$ мы должны получить 50 GBP и минус 1.5% от транзакции = 49.25 GBP.

Мы бы могли написать этот тест таким образом:

Bank bank = new Bank()
bank.addRate(USD, GBP" STANDART_RATE)
bank.commission(STANDART_COMMISSION)
Money result = bank.convert(new Note(100, “USD”), "GBP)
assertEquals(new Note(49.25, GBP), result)

Либо мы могли бы попробовать сделать вычисление более явным:

Bank bank = new Bank()
bank.addRate(USD, GBP, 2)
bank.commission(0.015)
Money result = bank.convert(new Note(100, USD), GBP)
assertEquals(new Note(100/2*(1-0.015), GBP), result)

Одним из полезных плюсов явных данных (Evident Data) является то, что если мы один раз написали вычисление в ассерте, то мы теперь знаем, что программировать в реализации. В рамках одного метода связь между 5-ю аргументами очевидна и Кент Бек считает, что он бы использовал в этом случае вариант с константами, если бы они были уже определены на данный момент, нежели второй вариант с явным вычислением.