gpt4 book ai didi

c++ - CPPUnit 我如何编写测试?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:35 26 4
gpt4 key购买 nike

好吧,我基本上是想着手编写一些 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;
}

最佳答案

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

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

对于您给出的第二个例子,第一件事是为 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();
}

关于c++ - CPPUnit 我如何编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com