基本级别的单元测试

时间:2014-04-08 12:58:28

标签: c++ unit-testing

在SO中有很多关于单元测试的问题。但我找不到的是某种基本的实现示例!

假设我有一个C ++代码除了一些复杂的操作外什么都不做。从技术上讲,课程将是:

class complex{
protected:
    float r,i;
public:
    complex(float rr=0, float ii=0):r(rr),i(ii){}

    complex operator+(complex a){
        return complex(r+a.r, i+a.i);
    }

    complex operator-(complex a){
        return complex(r-a.r, i-a.i);
    }

    complex operator*(complex a){
        return complex(r*a.r-i*a.i, r*a.i+i*a.r);
    }
};

现在它的单元测试是什么?你会如何为上述课程编写单元测试?我是否总是需要某种单元测试框架工作来开始编写单元测试?简而言之,我如何开始?如果可能的话,请在不建议使用任何框架的情况下回答!

修改

感谢您的评论和解答。我现在所做的是创建了一个单独的文件,其中只包含我的课程class_complex.cpp并进行了一些编辑:

class test_complex;
class complex{.....
.....
friend class test_complex;
}

然后创建另一个名为unittest_class_complex.cpp的文件,其中包含代码

#include <iostream>

#include "class_complex.cpp"

/* Test Cases */
class test_complex:public complex{
public:
    void pass(){
        std::cout<<"Pass\n";
    }
    void fail(){
        std::cout<<"Fail\n";    
    }

    void test_default_values(){
        std::cout<<"Default Values Test: ";
        complex c1;
        if(c1.r==0 && c1.i==0){
            pass();
        } else {
            fail();
        }
    }

    void test_value_constructor(){
        std::cout<<"Non-Default Values Test: ";
        complex c1(10,2);
        if(c1.r==10 && c1.i==2){
            pass();
        } else {
            fail();
        }
    }

    void test_addition(){
        std::cout<<"Addition Test: ";
        complex c1(1,1), c2(2,2), c3;
        c3 = c1 + c2;
        if(c3.r==3 &&c3.i==3){
            pass();
        } else {
            fail();
        }
    }

};
int main(){
    test_complex c;
    c.test_default_values();
    c.test_value_constructor();
    c.test_addition();
    return 0;
}

然后构建文件然后运行它!现在:我要走向正确的方向吗?这可以被称为一种单元测试吗?

1 个答案:

答案 0 :(得分:1)

你可以为那个班级找几个..

instantiate and validate the defaults for r and i (assert) 

instantiate with non-default values and validate r and i are set properly (you need getters)

perform addition and validate the expected result (you can even do this with edge cases) 

perform subtraction and validate the expected result (again with edge cases) 

perform the multiplication and validate the expected result (again with edge cases) 

单元测试应该测试单个代码单元...你有一个构造函数和三个操作符重载,这是一个最小的四个测试,但你应该总是检查默认值/设置值并运行一些边缘如果您认为代码中可能存在问题,则情况永远不会受到伤害。