单元/集成测试时间敏感的C ++代码

时间:2011-07-12 14:12:44

标签: c++ unit-testing testing integration-testing

有没有办法创建单元/集成测试,不仅测试正确性,还测试步骤是否在特定时间段内完成?

例如:

// 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);
    }
}

虽然该示例只是一个函数,但如果有一种方法将它们链接在一起以对较长的序列执行集成测试,那么如果每个步骤都正确并且在指定的时间内完成,则测试将返回true,这将是理想的。以及整个小组。

亚毫秒精度是首选,但典型的时间要求在5-15毫秒之间。

更新1:目标平台是UNIX(Mac OS X)。精确的时序要求是由问题域(通信)引起的。

更新2:根据评论,假设我专注于集成测试。

3 个答案:

答案 0 :(得分:1)

通常,以较小的粒度放置特定的时序要求并不是一个好主意。由于您使用的是OSX,因此您最多只能拥有一个软实时系统。 (如果您有严格的实时要求,OSX等通用操作系统不是答案。)可用的CPU / CPU内核数量有限。即使您的进程/进程组作为具有非常高优先级的超级用户运行,操作系统也可以在某种程度上任意决定让您的线程进入休眠状态。

答案 1 :(得分:0)

如果您在单元测试中检查您的功能是否在一定时间内完成,那么您做错了,因为这不应该在单元测试级别完成(对于集成级别来说更多)。这也会增加你的单元测试运行的时间,这很糟糕。此外,它还取决于运行的平台单元测试。

对于集成测试,您可以查看expect

答案 2 :(得分:0)

单位测试应该在确定的(和短暂的)时间内完成。您可能会稍微混淆集成和单元测试之间的差异。

话虽如此,您的测试框架应该为您解决这个问题。我建议UnitTest++很棒。