gpt4 book ai didi

c++ - CppUnit : Not able to write test cases

转载 作者:行者123 更新时间:2023-11-30 05:40:12 24 4
gpt4 key购买 nike

我在testBMath.cc 中编写了cppUnit 代码。我能够为前三个函数编写测试用例,它们是加法、减法和乘法。但是我无法为 Divide 和 Swap 编写测试用例。我不知道如何在测试用例中处理被零除以及如何检查 cppUnit 测试用例中的数字是否被交换。

测试数学.h

#ifndef TEST_MATH_H__
#define TEST_MATH_H__
class testMath
{
public:
int Addition(int x, int y);
int Multiply(int x, int y);
int Subtraction(int x, int y);
int Division(int x, int y);
void swap(int &x, int &y);
};
#endif

testMath.cc

    #include "testMath.h"

int testMath::Addition(int x, int y)
{
return (x + y);
}

int testMath::Multiply(int x, int y)
{
return (x * y);
}

int testMath::Subtraction(int x, int y)
{
return (x - y);
}

int testMath::Division(int x, int y)
{
if( b == 0 )
{
throw "Division by zero condition!";
}
return (a/b);
}

void swap(int &a, int &b)
{
int temp;

temp = b;
b = a;
a = temp;
}

testBMath.cc

    #include <iostream>
#include <string>
#include <list>
#include "cppunit/TestCase.h"
#include "cppunit/TestFixture.h"
#include "cppunit/ui/text/TextTestRunner.h"
#include "cppunit/extensions/HelperMacros.h"
#include "cppunit/extensions/TestFactoryRegistry.h"
#include "cppunit/TestResult.h"
#include "cppunit/TestResultCollector.h"
#include "cppunit/TestRunner.h"
#include "cppunit/BriefTestProgressListener.h"
#include "cppunit/CompilerOutputter.h"
#include "netinet/in.h"

#include "testMath.h"

using namespace CppUnit;
using namespace std;

//-----------------------------------------------------------------------------
class testBMath : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(testBMath);
CPPUNIT_TEST(testAddition);
CPPUNIT_TEST(testMultiply);
CPPUNIT_TEST(testSubtraction);
CPPUNIT_TEST(testDivision);
CPPUNIT_TEST(testSwap);
CPPUNIT_TEST_SUITE_END();

public:
void setUp(void);
void tearDown(void);

protected:
void testAddition(void);
void testMultiply(void);
void testSubtraction(void);
void testDivision(void);
void testSwap(void);

private:
testMath *mTestObj;
};

//-----------------------------------------------------------------------------

void testBMath::setUp(void)
{
mTestObj = new testMath();
}

void testBMath::testAddition(void)
{
CPPUNIT_ASSERT(5 == mTestObj->Addition(2,3));
}

void testBMath::testMultiply(void)
{
CPPUNIT_ASSERT(6 == mTestObj->Multiply(2,3));
}
void testBMath::testSubtraction(void)
{
CPPUNIT_ASSERT(2 == mTestObj->Subtraction(5,3));
}

void testBMath::testDivision(void)
{
CPPUNIT_ASSERT(6 == mTestObj->Division(12,2));
//But for divide by zero how should I write
}

void testBMath::testSwap(void)
{
//How should I check for swap
}

void testBMath::tearDown(void)
{
delete mTestObj;
}

//-----------------------------------------------------------------------------
CPPUNIT_TEST_SUITE_REGISTRATION( testBMath );

int main(int argc, char* argv[])
{
// informs test-listener about testresults
CPPUNIT_NS::TestResult testresult;

// register listener for collecting the test-results
CPPUNIT_NS::TestResultCollector collectedresults;
testresult.addListener (&collectedresults);

// register listener for per-test progress output
CPPUNIT_NS::BriefTestProgressListener progress;

testresult.addListener (&progress);

// insert test-suite at test-runner by registry
CPPUNIT_NS::TestRunner testrunner;

testrunner.addTest (CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest ());

testrunner.run(testresult);

// output results in compiler-format
CPPUNIT_NS::CompilerOutputter compileroutputter(&collectedresults, std::cerr);

compileroutputter.write ();

// return 0 if tests were successful
return collectedresults.wasSuccessful() ? 0 : 1;
}

最佳答案

我的建议是,将异常从 const char* 更改为更有意义的内容,例如 std::runtime_error:

int testMath::Division(int x, int y)
{
if( b == 0 )
{
throw std::runtime_error("Division by zero condition!");
}
return (a/b);
}

比测试看起来像:

void testBMath::testDivision(void)
{
CPPUNIT_ASSERT(6 == mTestObj->Division(12,2));
CPPUNIT_ASSERT_THROW(mTestObj->Division(12,0), std::runtime_error);
}

void testBMath::testSwap(void)
{
int x = 2;
int y = 3;
mTestObj->swap(x, y);
CPPUNIT_ASSERT(x == 3 && y == 2);
}

关于c++ - CppUnit : Not able to write test cases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832636/

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