4

好的,我基本上想开始并编写一些 CPPUnit 测试,但我不知道如何去做。在这里,我有一些代码基本上为关联的按钮组和位置参数获取指向菜单按钮的指针,我将如何为此创建测试?

CMenuButton* CMenuContainer::GetButton(const enumButtonGroup argGroup, const int32_t argPosition)
{
   CMenuButton* pButton = NULL;
   if (argGroup < MAX_GROUP_BUTTONS)
   {
      pButton = m_ButtonGroupList[argGroup].GetButton(argPosition);
   }
   return pButton;

作为对@Fabio Ceconello 的回复,是否可以为这样的代码设置一些测试?

unsigned long CCRC32::Reflect(unsigned long ulReflect, const char cChar)
{
    unsigned long ulValue = 0;

    // Swap bit 0 for bit 7, bit 1 For bit 6, etc....
    for(int iPos = 1; iPos < (cChar + 1); iPos++)
    {
        if(ulReflect & 1)
        {
            ulValue |= (1 << (cChar - iPos));
        }
        ulReflect >>= 1;
    }

    return ulValue;
}
4

1 回答 1

4

CppUnit 不太适合为用户界面创建自动化测试。它更适用于仅处理单元。例如,假设您创建了一个替代品,std::vector并希望确保它的行为与原来的一样,您可以编写测试,将元素添加到您的和标准实现中,然后进行更多处理(删除、更改元素等)。 ) 并在每一步之后检查两者是否具有一致的结果。

对于 UI,我不知道有什么好的开源/免费工具,但是Smart Bear 的 TestComplete是一种好的商业工具。

对于您给出的第二个示例,第一件事是为 Reflect() 方法定义有效性检查。例如,您可以手动计算某些值的结果,以检查每个值的返回值是否符合预期。或者您可以使用已知完全有效的反函数。

假设第一个选项,您可以这样编写测试:

class CRC32Test : public CppUnit::TestCase 
{ 
    public: 
        CRC32Test( std::string name ) : CppUnit::TestCase( name ) {}

    void runTest() 
    {
        struct Sample {unsigned long ulReflect; char cChar; unsigned long result};
        static Sample samples[] = 
        {
        // Put here the pre-calculated values 
        };

        int count = sizeof(samples) / sizeof(Sample);
        for (int i = 0; i < count; ++i)
            CPPUNIT_ASSERT(subject.Reflect(samples[i].ulReflect, samples[i].cChar) == samples[i].result);
   }

    private:
        CRC32 subject;
};

int main(void)
{
    CppUnit::TextUi::TestRunner runner;
    runner.addTest(new CppUnit::TestCaller<CRC32Test>("test CRC32", &CRC32::runTest));
    runner.run();
}
于 2011-11-17T15:40:56.387 回答