[personal profile] dememax
О модульном тестировании как таковом можете почитать здесь: http://hitfounder.livejournal.com/21424.html
Собственно, этот пост и подвигнул меня написать.

Хотел бы поделиться тем, как можно писать многопоточные тесты с использованием CppUnit.

Дело в том, что CppUnit реализует механизм утверждений через макросы+исключения.
Заводим некую переменную cppunit_ex, которая имет тип CppUnit::Exception.
Затем в функции нитки оформляем перехват:
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?
    }
}
Ну, вот, теперь можно в unsafe_thread_proc() писать привычный код с использованием макросов тестового фреймворка. А затем, в основной нитке нужно сделать что-то типа:
if (cppunit_ex.sourceLine().isValid())
    throw cppunit_ex;
Я, конечно, здесь упрощаю, там ещё нужно заботиться о запуске, завершении и доступе из разных нитей, но это вы уже и сами додумаете.

В отношении к тестированию, у меня было три периода в жизни:
  1. тесты?
  2. хорошо бы написать тесты
  3. без тестов продукт не отдавать
Но бывают, конечно, казусы. Например, в Contour Components мне дали задание переписать генератор отчётов, для него тесты написать было практически невозможно, т.к. результатом была графика на бумаге.

Спасибо за инфу

Date: 2011-06-03 11:09 pm (UTC)
From: [identity profile] mandafoby.livejournal.com
Автор +1Image (http://site-sex-znakomstva.ru/)

Profile

dememax

May 2023

S M T W T F S
 123456
78910111213
14151617181920
21 2223 24252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 18th, 2025 06:11 am
Powered by Dreamwidth Studios