В TDD вы выбираете тестовый пример и реализуете этот тестовый пример, тогда вы пишете достаточно производственного кода, чтобы тест проходил, реорганизовывал коды и снова вы выбираете новый тестовый пример, и цикл продолжается.
Проблема с этим процессом заключается в том, что TDD говорит, что вы пишете достаточно кода только для прохождения теста, который вы только что написали. То, что я имею в виду, это то, что если метод может иметь, например, 1 миллион тестовых случаев, что вы можете сделать?! Очевидно, что не пишется 1 миллион тестовых случаев?!
Позвольте мне объяснить, что я имею в виду более ясно, на примере ниже:
internal static List<long> GetPrimeFactors(ulong number)
{
var result = new List<ulong>();
while (number % 2 == 0)
{
result.Add(2);
number = number / 2;
}
var divisor = 3;
while (divisor <= number)
{
if (number % divisor == 0)
{
result.Add(divisor);
number = number / divisor;
}
else
{
divisor += 2;
}
}
return result;
}
Вышеприведенный код возвращает все простые коэффициенты заданного числа. ulong имеет 64 бита, что означает, что он может принимать значения от 0 до 18 446 744 073 709 551 615!
Итак, как TDD работает, когда могут быть миллионы тестовых примеров для производственной функциональности?!
Я имею в виду, сколько тестовых примеров достаточно для написания, чтобы я мог сказать, что я использовал TDD для достижения этого производственного кода?
Эта концепция в TDD, в которой говорится, что вы должны написать достаточно кода для прохождения теста, кажется мне неправильным, как видно из приведенного выше примера?
Когда достаточно достаточно?
Мои собственные мысли состоят в том, что я выбираю только некоторые тестовые примеры, например. для верхней полосы, нижней полосы и еще нескольких, например. 5 тестов, но это не TDD, не так ли?
Большое спасибо за ваши мысли о TDD для этого примера.