首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CppUnit :无法编写测试用例

CppUnit :无法编写测试用例
EN

Stack Overflow用户
提问于 2015-08-05 12:32:28
回答 1查看 345关注 0票数 2

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

testMath.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
    #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

代码语言:javascript
复制
    #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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-05 12:47:21

我的建议,将异常从const char*更改为更有意义的东西,比如std::runtime_error

代码语言:javascript
复制
int testMath::Division(int x, int y)
{
   if( b == 0 )
   {
      throw std::runtime_error("Division by zero condition!");
   }
   return (a/b);
}

比测试看上去更像是:

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31832636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档