标签: cppunit

cppunit:setUp()和tearDown()

我使用该框架的CppUnit来测试我的课,我想知道,如果这些方法TestFixture::setUp()TestFixture::tearDown()被调用一次TEST_SUITE或他们被称为每种方法加入到这一套件

c++ methods attributes unit-testing cppunit

3
推荐指数
1
解决办法
3898
查看次数

CppUnit测试总是通过Ctest传递

我正在使用CMake开发一个项目,并且只是集成了一些CppUnit测试.我想使用CTest,因此我在我的CMakeLists.txt文件中使用了add_test来在输入时执行测试make test.然而我观察到,在输入时make test,它表示即使我用微不足道的错误进行测试,所有测试都会通过.手动执行时(例如./my_test),错误的测试会报告这些错误,但在执行时不会报告make test.

以下是测试目录中我的CMakeLists.txt的内容:

add_executable(TestDataSpace TestDataSpace.cpp)
target_link_libraries(TestDataSpace ${DEP_LIBRARIES} ${CPPUNIT_LIBRARIES})

add_executable(TestVariableManager TestVariableManager.cpp)
target_link_libraries(TestVariableManager ${DEP_LIBRARIES} ${CPPUNIT_LIBRARIES})

add_executable(TestLayoutManager TestLayoutManager.cpp)
target_link_libraries(TestLayoutManager ${DEP_LIBRARIES} ${CPPUNIT_LIBRARIES})

add_test(NAME "TestDataSpace" COMMAND ${MY_PROJECT_SOURCE_DIR}/test/TestDataSpace)
add_test(NAME "TestVariableManager" COMMAND ${MY_PROJECT_SOURCE_DIR}/test/TestVariableManager)
add_test(NAME "TestLayoutManager" COMMAND ${MY_PROJECT_SOURCE_DIR}/test/TestLayoutManager)
Run Code Online (Sandbox Code Playgroud)

CTest确实找到了可执行文件,因为为命令设置了错误的路径会让CMake抱怨它找不到它们.

make test 输出以下内容:

运行测试...测试项目

Start 1: TestDataSpace 1/3 Test #1: TestDataSpace ....................   Passed    0.01 sec
Start 2: TestVariableManager 2/3 Test #2: TestVariableManager ..............   Passed    0.02 sec
Start 3: TestLayoutManager 3/3 Test #3: TestLayoutManager ................   Passed    0.01 sec
Run Code Online (Sandbox Code Playgroud)

100%测试通过,0测试失败3

我错过了什么?

cppunit cmake ctest

3
推荐指数
1
解决办法
2340
查看次数

使用CPPUnit的Printf样式断言

CPPUnit是否有任何功能可以让我做出printf风格的断言?例如:

CPPUNIT_ASSERT("Actual size: %d", p->GetSize(), p->GetSize() == 0);
Run Code Online (Sandbox Code Playgroud)

我知道这不是一个有效的CPPUNIT_ASSERT - 我只是以此为例.

我发现CPPUNIT_ASSERT_MESSAGE(message,condition)哪个接受一个字符串,然后条件来评估,但没有运气将值输入断言.

c++ cppunit

3
推荐指数
1
解决办法
1406
查看次数

如何使用cppunit就像junit ---两个主电源

我知道Java的单元测试非常简单.我们只需要使用JUnit并运行测试类作为JUnit测试.

现在我正在使用C++,我找到了一个测试库:cppunit.

似乎我需要使用特定功能运行我的测试main.但是,一个cpp项目只能有一个main.

我该怎么办?当我进行测试和运行项目时,我必须切换主电源?

c++ cppunit

3
推荐指数
1
解决办法
402
查看次数

组件测试的测试框架

我正在寻找适合我要求的测试框架.以下是我在自动化测试期间需要执行的步骤:

  • SetUp(有一些输入文件需要读取或复制到某些特定的文件夹中.)
  • 执行(独立运行)
  • 撕下(清理以使系统处于旧状态)

除此之外,我还希望有一些智能来确保.cc文件是否已更改,所有可以验证更改的测试都应该运行.

我正在评估PyUnit,cppunit与scons为此.考虑运行这个问题以确保我的方向正确.你能建议任何其他测试框架工具吗?选择正确的测试框架应该考虑哪些其他要求?

c++ testing cppunit scons python-unittest

2
推荐指数
1
解决办法
2262
查看次数

cpp单元设置和拆卸功能

任何人都可以告诉我如何以及何时在cppunit中调用setup和teardown函数.谢谢

c++ cppunit

2
推荐指数
1
解决办法
3593
查看次数

如何对void函数CPPUNIT进行单元测试

我正在使用CPPUNIT为我的C++程序进行单元测试

对于非void函数,假设存在函数add()

int add(int num1 , int num2)
{
  return num1+num2;
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样进行单元测试

void newtestclass::add()
{
    int result = add(2,3);
    CPP_ASSERT(result == 5 ); 

}
Run Code Online (Sandbox Code Playgroud)

当我尝试对非void函数进行单元测试时遇到问题

void printmenu()
{
    cout<<"1) Option A"
        <<endl
        <<"2) Option B";
}
Run Code Online (Sandbox Code Playgroud)

我如何对这些功能进行单元测试,以确保100%的代码覆盖率

我还遇到了嵌套在其他函数中的函数的单元测试问题

void menu_select(char x)
{
    if ( x == 'a')
    {
        add();
    }
    else if ( x == 'b' )
    {
        subtract();
    }

}

void menu()
{
  char choice;
  cout<<"a) Add "
      <<endl
      <<"b) Subtract";
  cin>>choice;

  menu_select(choice);

}
Run Code Online (Sandbox Code Playgroud)

我如何对这些功能进行单元测试,以确保100%的代码覆盖率

c++ unit-testing cppunit

2
推荐指数
1
解决办法
3600
查看次数

cmake for GNU Radio 教程

我试图按照在 gnuradio 网站上构建信号处理块的教程进行操作:http : //gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModules

但是,当涉及到需要我使用 CMake 的步骤时,终端抱怨说

package cppunit is not found  checking for module 'cppunit'
--   package 'cppunit' not found
-- Could NOT find CPPUNIT (missing:  CPPUNIT_INCLUDE_DIRS) 
CMake Error at CMakeLists.txt:101 (message):
  CppUnit required to compile howto
Run Code Online (Sandbox Code Playgroud)

我尝试过诸如sudo apt-get cppunit.

cppunit gnuradio cmake

2
推荐指数
1
解决办法
5643
查看次数

安装 CppUnit 库和 CppUnit 包括

我正在尝试从源代码编译软件。在一个编译阶段,我需要导航包含 CppUnit 库(例如 /home/user/lib)和 CppUnit Includes(例如 /home/user/include)的目录。如何安装这些 CppUnit 并将它们导航到 ubuntu 14.04?

c++ cppunit

2
推荐指数
1
解决办法
7417
查看次数

如何使用 Visual Studio CppUnitTestFramework 初始化测试变量

我正在编写一个机器人控制器类Controller,其中我为 4 个可控电机中的每一个使用一个Axis结构体。

对于每个测试,我想重置所有内容,因此我在类中创建了一个指针,在每个测试方法之前将其更改为新的控制器。初始化在 TEST_METHOD_INITIALIZE 中工作正常,但是一旦调用任何 TEST_METHOD,程序似乎会重置轴指针。

感谢您的帮助!

编辑:经过进一步分析,我得出的理论是,初始化的 Axis 对象 Axis init_mx 在方法完成后将被删除。

Edit2:我认为这是一个稍微复杂一点的问题,如下所示:Pointer to local variable in C++ 尽管如此,我没有找到一种方法来重置每个方法的 Axis 变量,而不实际重置其中的每个变量。

using namespace Microsoft::VisualStudio::CppUnitTestFramework;
...
namespace UnitTest
{

    TEST_CLASS(UnitTestController)
    {
    public:
        Controller* controller;
        struct Axis *mx, *my, *mz, *mg;

        TEST_METHOD_INITIALIZE(methodName)
        {
            Axis init_mx(50), init_my(50), init_mz(50), init_mg(5);         
            mx = &init_mx;
            my = &init_my;
            mz = &init_mz;
            mg = &init_mg;
            Controller init_controller(mx, my, mz, mg);
            controller = &init_controller;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

        }
        ...
        TEST_METHOD(id_3_next_mode)
        {
            mx->position = 5; 
            controller->getAxisPositionMx(); …
Run Code Online (Sandbox Code Playgroud)

c++ cppunit visual-c++ microsoft-cpp-unit-test

2
推荐指数
1
解决办法
3390
查看次数

Doing a "less than" test with CppUnit

I am new to CppUnit. Is there any way to assert that a value must be less than zero? I am looking for something with similar behavior to CPPUNIT_ASSERT_EQUAL(). I was thinking there might be a test function named something like CPPUNIT_ASSERT_LESS_THAN().

c++ cppunit

1
推荐指数
1
解决办法
1532
查看次数

如何初始化对在单独文件中声明的类的引用?

class Foo{
    void operator=(const Foo&){};   
public:
    Foo(){};
};

Foo& fooRef(){
    static Foo aFoo;
    return aFoo;
}
int main() {
    Foo &foo = fooRef();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码正常工作,不会发出任何错误.一旦我将主体改为:

int main(){
    Foo &foo; 
    foo = fooRef();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器尝试使用operator=并因此抱怨.所以我的第一个问题是:它为什么会有所作为?

我来到这个事实的方式是我在做单元测试使用CPPunit,我一定要考有签名一个单独的类getInstance()Singleton& getInstance().为了进行测试,我试图在TestSingleton类中单例初始化一个实例.因此有:

class TestSingleton{
...
private:
    Singleton &instance;
};


void TestSingleton::setUp(){
    this->instance = Singleton::getInstance();
}
Run Code Online (Sandbox Code Playgroud)

以上示例发出错误(因为operator=声明为私有,如果不是,则很明显我不会被调用).所以第二个问题是:我如何避免这种情况并在我的TestSingleton班级中获得单身实例?

c++ singleton cppunit

0
推荐指数
1
解决办法
63
查看次数

CppUnit:为什么静态局部变量保持其值?

我正在尝试使用CppUnit来测试一个只在第一次调用时才执行某些代码的方法.

class CElementParseInputTests: public CppUnit::TestFixture {
private:
    CElement* element;
public:

    void setUp() {
        element = new CElement();
    }

    void tearDown() {
        delete element;
    }

    void test1() {
        unsigned int parsePosition = 0;
        CPPUNIT_ASSERT_EQUAL(false, element->parseInput("fäil", parsePosition));
    }

    void test2() {
        unsigned int parsePosition = 0;
        CPPUNIT_ASSERT_EQUAL(false, element->parseInput("pass", parsePosition));
    }
Run Code Online (Sandbox Code Playgroud)

我想测试的递归方法:

bool CElement::parseInput(const std::string& input, unsigned int& parsePosition) {
    static bool checkedForNonASCII = false;
    if(!checkedForNonASCII) {
        std::cout << "this should be printed once for every test case" << std::endl;
        [...]
        checkedForNonASCII = …
Run Code Online (Sandbox Code Playgroud)

c++ oop static cppunit initialization

-1
推荐指数
1
解决办法
128
查看次数