Модульный / интеграционный тест, чувствительный ко времени C ++ - PullRequest
4 голосов
/ 12 июля 2011

Есть ли способ создания модульных / интеграционных тестов, которые не только проверяют правильность, но и проверяют, что шаги были выполнены в течение определенного периода времени?

Например:

// MyTestSuite.h
#include <cxxtest/TestSuite.h>
class MyTestSuite : public CxxTest::TestSuite
{
    public:
    void testTimeCriticalFunction(void)
    {
        TS_ASSERT_EQUALS(timeCriticalFunction(), correctValue);

        // timeCriticalFunction() must correctly return within 5 milliseconds
        TS_ASSERT_DID_COMPLETE_WITHIN_MILLISECONDS(timeCriticalFunction(), 5);
    }
}

Хотя в качестве примера используется только одна функция, было бы идеально, если бы был способ объединить их в цепочку для проведения интеграционного тестирования на более длинной последовательности, чтобыtest вернул бы значение true, если бы каждый шаг был правильным и завершенным в течение указанного времени, а также всей группы.

Точность менее миллисекунды является предпочтительной, но типичные требования по времени составляют от 5 до 15 миллисекунд.

ОБНОВЛЕНИЕ 1: Целевая платформа - UNIX (Mac OS X).Точные требования к времени обусловлены проблемной областью (связь).

ОБНОВЛЕНИЕ 2: Учитывая комментарии, предположим, что я сосредоточен на интеграции тестировании.

Ответы [ 3 ]

1 голос
/ 12 июля 2011

В общем случае не стоит помещать конкретные требования по синхронизации, такие как требования, в небольшую степень детализации. Поскольку вы используете OSX, у вас есть не более мягкая система реального времени. (Если у вас есть жесткие требования в реальном времени, ОС общего назначения, такая как OSX, не является ответом.) Доступно ограниченное количество процессоров / ядер ЦП. ОС может несколько произвольно решить перевести ваш поток в спящий режим, даже если ваша группа процессов / процессов работает как суперпользователь с очень высоким приоритетом.

0 голосов
/ 12 июля 2011

Юнит-тесты должны завершаться в определенный (и короткий) промежуток времени.Вы можете немного запутать разницу между интеграцией и модульным тестированием.

При этом ваша платформа тестирования должна решить эту проблему за вас.Я рекомендую UnitTest ++ как отличный.

0 голосов
/ 12 июля 2011

Если вы проверяете в модульном тесте, закончилась ли ваша функция в течение определенного времени, то вы делаете это неправильно, потому что этого не следует делать на уровне модульного тестирования (это больше для уровня интеграции).Это также увеличит время выполнения ваших юнит-тестов, и это плохо.Кроме того, это будет зависеть от запуска модульных тестов платформы.

Для интеграционных тестов вы можете проверить ожидать .

...