- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在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/
我使用 CppUnit 作为单元测试框架。是否可以选择在运行时执行的测试用例子集? CppUnit 中是否提供了过滤选项来适应这一点? 最佳答案 您可能在 main() 中调用的 TestRunner
我们有许多 CPPUNIT 测试套件,每个测试套件都有自己的 setUp()/tearDown(),我想要做的是在所有套件中都有一个通用的 setUp()/tearDown()。据我了解,对于给定的套
我正在尝试从源代码编译软件。在一个编译阶段,我需要导航包含 CppUnit 库(例如/home/user/lib)和 CppUnit 包含(例如/home/user/include)的目录。如何安装这
我正在移植包含大量基于 CppUnit 1.9.11 左右的测试套件的代码。我的测试运行器可以使用这个(已弃用?)成语打印所有命名的测试套件: cout first (test); if (!s) {
我是第一次尝试使用 CppUnit 测试。当我尝试编译测试代码时,我得到: testing.cpp:(.text+0xca): undefined reference to `CppUnit::Sou
我开始使用 CppUnit 进行 C++ 单元测试。我试图实现的目标是在单个主文件(和函数)上运行我所有的测试套件。让我解释一下: 假设我们有两个类对我设计的两个 C++ 类进行测试: #ifndef
首先,如果我想设置一个测试,我使用什么类: class MyClassTests setup() teardown() testDoingSomething() tes
如何在之后的 CPPUNIT_TEST 中访问我在第一个 CPPUNIT_TEST 中设置的变量? 对于 EX。 CPPUNIT_TEST_SUITE(TestingEx); CPPUNIT_TEST
我想知道测试基类的有效设计或实现。 举个例子: class Polygon; class Rectangle : public Polygon; class Triangle : public Pol
我是CPPUnit测试的新手,已经用各种测试用例编写了登录认证功能的测试。但它只接受返回值零。 如果预期和实际相同,第一个测试用例应返回 1,但它仅在我更改为零时有效。任何建议表示赞赏。谢谢。 voi
我知道可以将 CppUnit Lite 用于嵌入式系统,但 CppUnit 也是这种情况吗? 最佳答案 在 INSTALL 文件中找到答案... If you want to use a cross
我想我在这里遗漏了一些非常愚蠢的东西。 我安装了 libcppunit:(我使用的是 Ubuntu 12.04) $ apt-cache policy libcppunit-dev libcppuni
我使用 CPPUNIT_ASSERT_EQUAL(a, b) 来检查值 a 和 b。 a 和 b 是 unsigned char 类型。因此,当此断言失败时,它将显示预期值和实际值。因为类型是unsi
我在一个测试函数中使用了多个断言,但是当(例如)第一个断言失败时,其余的断言将不再执行。有没有办法用 CppUnit 做一个断言(CPPUNIT_ASSERT),它在失败后不会离开测试函数?例如非中止
考虑这个 CPPUNIT 测试类打算进行相同的测试 ( doTest ) 但具有不同的参数: class MyTest : public CPPUNIT_NS::TestFixture { CPP
好吧,我基本上是想着手编写一些 CPPUnit 测试,但我不知道该怎么做。这里我有一些代码,基本上是为关联的按钮组和位置参数获取指向菜单按钮的指针,我将如何为此创建测试? CMenuButton* C
我对 C++ 和 CPPUnit 有点陌生。有人能告诉我应该使用什么来断言数组值(将它们与预期进行比较)。我应该使用 memcmp 还是在 CPPUnit、一般的 C++ 或任何其他库中有更好的东西?
我知道 CppUnit 可以通过以下方式测试异常: CPPUNIT_ASSERT_THROW(expression, ExceptionType); 谁能解释一下 CPPUNIT_ASSERT_THR
我正在使用 CppUnit 为 C++ 库编写单元测试。默认情况下,它会打印一个“.”。字符到每个测试的控制台。在测试运行之前,我想在单独的行上记录每个测试的名称。 我已经研究了 CppUnit AP
我正在使用 CMake 开发一个项目,并且刚刚集成了一些 CppUnit 测试。我想使用 CTest,因此我在 CMakeLists.txt 文件中使用了 add_test,以便在键入 make te
我是一名优秀的程序员,十分优秀!