CppUnit & Concurrency
Oct. 4th, 2009 04:56 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
О модульном тестировании как таковом можете почитать здесь: http://hitfounder.livejournal.com/21424.html
Собственно, этот пост и подвигнул меня написать.
Хотел бы поделиться тем, как можно писать многопоточные тесты с использованием CppUnit.
Дело в том, что CppUnit реализует механизм утверждений через макросы+исключения.
Заводим некую переменную cppunit_ex, которая имет тип CppUnit::Exception.
Затем в функции нитки оформляем перехват:
В отношении к тестированию, у меня было три периода в жизни:
Собственно, этот пост и подвигнул меня написать.
Хотел бы поделиться тем, как можно писать многопоточные тесты с использованием CppUnit.
Дело в том, что CppUnit реализует механизм утверждений через макросы+исключения.
Заводим некую переменную cppunit_ex, которая имет тип CppUnit::Exception.
Затем в функции нитки оформляем перехват:
Ну, вот, теперь можно в unsafe_thread_proc() писать привычный код с использованием макросов тестового фреймворка. А затем, в основной нитке нужно сделать что-то типа:void * thread_proc(void *context) { try { return unsafe_thread_proc(context); } catch(const CppUnit::Exception & ex) { std::cerr << "thread_proc(): cppunit exception :" << ex.what() << std::endl; cppunit_ex = ex; } catch(const std::exception & ex) { std::cerr << "thread_proc(): exception :" << ex.what() << std::endl; } catch(...) { std::cerr << "thread_proc(): unknown exception" << std::endl; throw; // Update: см. Вопрос: Как дела с catch(...) в MS? } }
Я, конечно, здесь упрощаю, там ещё нужно заботиться о запуске, завершении и доступе из разных нитей, но это вы уже и сами додумаете.if (cppunit_ex.sourceLine().isValid()) throw cppunit_ex;
В отношении к тестированию, у меня было три периода в жизни:
- тесты?
- хорошо бы написать тесты
- без тестов продукт не отдавать
no subject
Date: 2009-10-04 01:29 pm (UTC)зато я знаю, кому это может быть полезно!
большое спасибо :))
Re: кому это может быть полезно!
Date: 2009-10-04 09:02 pm (UTC)На здоровье!
Кстати, если речь о Дойче, я когда в Сервис-Касте работал, чуть ли не с первого дня (и чуть ли не до последнего) пополнял базу CppUnit тестов для австралийского кода.
А ещё мини-семинар по CppUnit читал для своих коллег.
Но, как известно, Дойче взял курс на Яву и .Net.
Digitizing library collections in canada
Date: 2011-03-17 05:31 pm (UTC)Спасибо за инфу
Date: 2011-06-03 11:09 pm (UTC)