для TDD «хорошие» тесты тестируют функции, которые хочет заказчик ; функции не обязательно соответствуют функциям, и тестовые сценарии не должны создаваться разработчиком в вакууме
в вашем случае - я предполагаю - «особенность» заключается в том, что функция подгонки моделирует входные данные в пределах определенной погрешности. Поскольку я понятия не имею, что вы на самом деле делаете, я что-то придумываю; Надеюсь, это анальгетик.
Пример истории:
Как [X-Wing Pilot] я хочу [не более 0,0001% погрешности посадки], чтобы [целевой компьютер мог попасть в выпускной порт Звезды Смерти при движении на полной скорости через каньон коробки]
Итак, вы идете поговорить с пилотами (и с целевым компьютером, если разум). Сначала вы говорите о том, что является «нормальным», затем говорите о ненормальном. Вы узнаете, что действительно имеет значение в этом сценарии, что является общим, что маловероятным, а что просто возможно.
Предположим, что обычно у вас будет полсекундное окно по семи каналам телеметрических данных: скорость, угол наклона, крен, рыскание, вектор цели, размер цели и скорость цели, и что эти значения будут постоянными или изменяются линейно. Ненормально у вас может быть меньше каналов и / или значения могут быстро меняться. Итак, вместе вы придумаете несколько тестов, таких как
//Scenario 1 - can you hit the side of a barn?
Given:
all 7 channels with no dropouts for the full half-second window,
When:
speed is zero
and target velocity is zero
and all other values are constant,
Then:
the error coefficient must be zero
//Scenario 2 - can you hit a turtle?
Given:
all 7 channels with no dropouts for the full half-second window,
When:
speed is zero
and target velocity is less than c
and all other values are constant,
Then:
the error coefficient must be less than 0.0000000001/ns
...
//Scenario 42 - death blossom
Given:
all 7 channels with 30% dropout and a 0.05 second sampling window
When:
speed is zero
and position is within enemy cluster
and all targets are stationary
Then:
the error coefficient must be less than 0.000001/ns for each target
Теперь вы, возможно, заметили, что нет сценария для конкретной ситуации, описанной в истории. После разговора с заказчиком и другими заинтересованными сторонами выясняется, что цель в оригинальной истории была лишь гипотетическим примером. Настоящие испытания вышли из последовавшего обсуждения. Это может случиться История должна быть переписана, но это не обязательно [так как история - просто место для разговора с клиентом].