CPPUnit我如何编写测试?

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;
}
1个回答

4

CppUnit 不适合用于为用户界面创建自动化测试。它更适合于处理-only单位。例如,假设您创建了一个替代 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();
}

我已经回复了你并在我的主要问题中添加了一些代码。 - bigbaz34
谢谢您的帮助。我对这些cppunit测试完全是新手,我该如何让它正常工作?包含语句?#include cppunit.h或其他什么? - bigbaz34
是的,抱歉没有提到,我跳过了准备部分。CPPUnit使用每个类一个头文件的约定,头文件名与相应的类名相同。因此,在上面的示例中,您需要#include TestCase.h、TestRunner.h和TestCaller.h。 - Fabio Ceconello
1
这两个链接也可能会有所帮助:http://cppunit.sourceforge.net/doc/1.8.0/cppunit_cookbook.html 和 https://www.scorec.rpi.edu/w/images/0/05/GuideToCppUnit.pdf - Fabio Ceconello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接