JUnit Cookbook
Kent Beck, Erich Gamma
оригиналПростейший случай
Как писать тестирующий код?Простейший способ – написать проверочное выражение в отладчике. Это выражение можно менять без перекомпиляции, и можно сверить то, что вы пишете, с живыми объектами запущенной программы. Ещё можно написать тестовый вывод в stdout. Оба эти варианта тестов ограничены – они требуют, чтобы результаты тестирования анализировал человек. К тому же, вы можете одновременно отлаживать только один участок кода, а программа с большим количеством отладочной печати вызывает ужасную “скроллерную слепоту” (“scroll blindness”).
Тесты JUnit не требуют человеческого суждения, и вы можете запустить большое их количество выполняться одновременно. Когда вы хотите протестировать что-либо, вы:
- Наследуете класс от TestCase;
- Пишете конструктор, принимающий
Stringи передающий его родителю; - Переопределяете метод
runTest(); - Чтобы проверить некоторое значение, вызываете
assertTrue()и передаёте ему булевское значение, означающее, успешна ли проверка.
public void testSimpleAdd() {
Money m12CHF = new Money(12, "CHF");
Money m14CHF = new Money(14, "CHF");
Money expected = new Money(26, "CHF");
Money result = m12CHF.add(m14CHF);
assertTrue(expected.equals(result));
}
Код для CppUnit
Если хотите написать тест, похожий на уже написанный, используйте Fixture вместо TestCase. Если нужно написать более одного теста, используйте Suite.TestRunner
Как запустить тест и получить его результаты.public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new MoneyTest("testMoneyEquals"));
suite.addTest(new MoneyTest("testSimpleAdd"));
return suite;
}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
Разрешения авторов спрошу чуть пожжее :) Кто знает, как написать Беку и Гамме? :))
Ещё буду переводить Cook's Tour.
Код для CppUnit
#include <cppunit/extensions/HelperMacros.h>
#include "Money.h"
class CMoneyTestCases : public CPPUNIT_NS::TestFixture
{
private:
CPPUNIT_TEST_SUITE( CMoneyTestCases );
CPPUNIT_TEST( TestSimpleAdd );
CPPUNIT_TEST_SUITE_END();
public:
void TestSimpleAdd();
};
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
int main(int argc, char* argv[])
{
// Create the event manager and test controller
CPPUNIT_NS::TestResult controller;
// Add a listener that colllects test result
CPPUNIT_NS::TestResultCollector result;
controller.addListener( &result );
// Add a listener that print dots as test run.
CPPUNIT_NS::BriefTestProgressListener progress;
controller.addListener( &progress );
// Add the top suite to the test runner
CPPUNIT_NS::TestRunner runner;
runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
runner.run( controller );
// Print test in a compiler compatible format.
CPPUNIT_NS::CompilerOutputter outputter( &result, std::cerr );
outputter.write();
return result.wasSuccessful() ? 0 : 1;
}
Код для NUnit
Upd: найден "официальный перевод" на C++ для CppUnit. Почему-то Бек и Гамма там не упомянуты :)Tags:
А английский для программеров уже не обязателен?
15/8/05 04:30 (UTC)(no subject)
15/8/05 04:33 (UTC)Ужос
15/8/05 05:05 (UTC)Если этим людЯм нужно переводить такую легкую книгу как "JUnit Cookbook", то что будет дальше?
(no subject)
15/8/05 05:11 (UTC)Давно :)
15/8/05 05:17 (UTC)Но сейчас рядом со мной сидит новичек и на той неделе он как раз штудировал этот самый кокбук на инглише :)
ЗЫ.
Я ничего не имею против перевода - это полезное дело.
Но создавать для новичков тепличные условия..?
Re: Давно :)
15/8/05 06:01 (UTC)Мне же нужно, чтобы они поняли как можно лучше.
(no subject)
15/8/05 06:04 (UTC)Я, может, прямо на junit.org отправлю :) Если у них есть раздел с переводами...
Программерский бум???
15/8/05 06:08 (UTC)Или прямо со школы???
Как-то давно мне рассказывали, что во времена расцвета доткомов в штатах, в Харькове прямо на Барабашовском рынке людей в Америку набирали в программисты...
(no subject)
15/8/05 06:12 (UTC)(no subject)
15/8/05 06:13 (UTC)Это выпускники примата/радиофиза.
Двоешники?
15/8/05 06:36 (UTC)Или у нас в Днепре еще монстры есть?
Система код-ревью...
15/8/05 06:37 (UTC)По крайней мере я в одном ;) проекте так писал.
(no subject)
16/8/05 00:11 (UTC)Re: Система код-ревью...
16/8/05 00:13 (UTC)- в GUI;
- в системе со сложным и запутанным legacy кодом, типа Лаба. Юнит тесты в таком случае требуют серьёзного рефакторинга. А останавливать работу над проектом на три месяца только чтобы написать тесты тебе никто не даст.
типа Лаба
16/8/05 00:20 (UTC)Или таки новое пишете?
Re: типа Лаба
16/8/05 01:31 (UTC)