Тестирование функции, которая всегда возвращает True - PullRequest
3 голосов
/ 11 мая 2011

Как написать тест для следующей функции?

bool IsAnInterger(int ignore) 
{
    return true
}

У меня недостаточно времени для перебора каждого целого числа (для реального кода параметр даже не является целым числом).

Используется как часть шаблона спецификации, поэтому я могу реализовать нулевой объект.

Ответы [ 3 ]

6 голосов
/ 11 мая 2011

... тестирование может быть очень эффективным способом показать наличие ошибок, но безнадежно неадекватно, чтобы показать их отсутствие.

- Эдсгер В. Дейкстра

Я бы сказал, что бессмысленно пытаться исчерпывающе протестировать эту функцию в черном ящике.Лучше протестировать его в контексте, аналогичном тому, где он будет использоваться.

2 голосов
/ 11 мая 2011

В TDD вы сначала пишете тест, и этот тест должен определять конкретное поведение. Таким образом, вопрос должен всегда звучать так: что я ожидаю? - а затем напишите тест, чтобы проверить это поведение, - наконец, напишите решение для прохождения теста.

edit: Понимание вопроса

Вы имеете в виду, что эта функция является поведением для несуществующей спецификации, например Нулевая спецификация? Вы можете, конечно, проверить эту нулевую спецификацию на предмет ее поведения определенным образом. Хотя, по-видимому, это в значительной степени будет жестко закодированные однострочные возвращаемые значения (если что-нибудь) Тесты для этого нулевого объекта будут тогда в основном только документировать, что должна делать нулевая спецификация. Это не добавит никакой дополнительной коммерческой ценности в систему.

0 голосов
/ 11 мая 2011

Поскольку вы не можете разумно протестировать каждый случай, вы можете использовать Математическая индукция в качестве основы для своих тестов.Вы не можете сделать это алгебраически, но вы можете выбрать произвольное значение для n.

#include <limits>
#include <cassert>

bool IsAnInteger(int) 
{
    return true;
}

int main()
{
    assert(IsAnInteger(std::numeric_limits<int>::min())); // First
    assert(IsAnInteger(0)); // n
    assert(IsAnInteger(1)); // n+1
}

Редактировать

Держись!

для фактического кода параметр даже не является целым числом

Что это тогда?

#include <cassert>

template <class T>
bool IsAnInteger(const T&) 
{
    return true;
}

int main()
{
    assert(IsAnInteger(0)); // First
    assert(IsAnInteger("I am not a number!")); // n
    assert(IsAnInteger(42.0f)); // n+x
}

Ваша функция прошла 100% тестпокрытие и ваши юнит-тесты точно документируют, как оно ведет себя.В TDD вам нужно всего лишь написать достаточно кода , чтобы ваши модульные тесты прошли.Вы закончили с этим и можете двигаться дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...