ловлю себя на том, что в очень большом числе случаев самые простые,
эффективные и легко поддерживаемые юнит тесты выражаются в виде
таблицы "Аргументы метода — Ожидаемый(ые) результат(ы)". В качестве
результата в простейшем случае выступает возвращаемое значение функции,
но могут быть и более сложные зависимости. В общем случае результат
можно выразить набором каких-то значений.
Так вот, вопрос. Во-первых, есть ли название у такого подхода к юнит-
тестированию. И во-вторых, есть ли библиотеки для C++ которые
поддерживают подобный подход? Спасибо!
Использовали инструмент для функциональных тестов, для юнит тестирования, есть подозрение, будет не очень удобным, т.к. существует разделение на код и тесты в табличном представлении.
Здравствуйте, iNibbler, Вы писали:
N>ATDD, но это скорее не к юнит тестированию, а функциональному/приемочному. N>Можно посмотреть в сторону Fit — http://fitnesse.org/FrontPage.FitServers.CppFit.CppTestTools
N>Использовали инструмент для функциональных тестов, для юнит тестирования, есть подозрение, будет не очень удобным, т.к. существует разделение на код и тесты в табличном представлении.
FIT, как было сказано, для тестов пользователя (приемочное тестирование). A.J., походу, имел что-то в таком духе (это NUnit для .net):
[TestCase(12,3,4)]
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q)
{
Assert.AreEqual( q, n / d );
}
[TestCase(12,3, Result=4)]
[TestCase(12,2, Result=6)]
[TestCase(12,4, Result=3)]
public int DivideTest(int n, int d)
{
return( n / d );
}
По поводу наличия таких же плюшек для плюсов я не знаю
Здравствуйте, Aikin, Вы писали:
A>FIT, как было сказано, для тестов пользователя (приемочное тестирование). A>A.J., походу, имел что-то в таком духе (это NUnit для .net):
Да, именно это имел в виду и поэтому FIT вряд ли подойдет.
Пока что делаю вот так с помощью Boost.Test и Boost.Foreach, в принципе получается достаточно близко к идеалу, хотя конечно хотелось бы
еще больше обобщить:
AJ>Да, именно это имел в виду и поэтому FIT вряд ли подойдет.
Почему же не подойдет? Единственный недостаток — большие затраты на поддержку. Зато наглядность и простота диагностики отличные.
Кстати, в Cucumber тоже есть табличные тесты. Не знаю, есть ли он для плюсов.
Здравствуйте, A.J., Вы писали:
AJ>Приветствую,
AJ>Так вот, вопрос. Во-первых, есть ли название у такого подхода к юнит- AJ>тестированию. И во-вторых, есть ли библиотеки для C++ которые AJ>поддерживают подобный подход? Спасибо!
Здравствуйте, A.J., Вы писали:
AJ> И во-вторых, есть ли библиотеки для C++ которые поддерживают AJ> подобный подход? Спасибо!
Насколько я помню, Qt поддерживает. QtTest, или как там его..
Тащить для этого Qt в основной проект не придётся — можно просто тесты или часть тестов на QtTest написать.
Здравствуйте, A.J., Вы писали:
AJ> Так вот, вопрос. Во-первых, есть ли название у такого подхода к юнит- AJ> тестированию. И во-вторых, есть ли библиотеки для C++ которые AJ> поддерживают подобный подход? Спасибо!
Пишем вспомогательную функцию:
void testMe(ResultType expected, Type1 arg1, Type2 arg2, ..., TypeN argN)
{
myCode(arg1, ..., argN);
int i = moreCode(arg1, ...);
assertEquals(expected, muchMoreCode(i, argN));
}
// а вот и таблица
testMe(1, 2, "abc");
testMe(3, 4, "cde");
Что тут ещё надо? Зачем ещё какой-то фреймворк? И так кода минимум.