在Test Project中包含.cpp文件的更好方法?

时间:2015-09-15 14:53:24

标签: c++ visual-studio unit-testing

我目前正在使用Visual Studio编写C ++程序。

现在,我想添加第二个测试项目,它应该包含我的单元测试。问题是,如果我想测试自己的代码,我必须将源项目的每个.cpp文件从我的主项目添加到第二个项目,即使我包含了标题。还有更好的选择吗?

非常感谢。

2 个答案:

答案 0 :(得分:4)

您可以按照下一种方式:

  1. 将主项目拆分为可执行文件和静态或动态库
  2. 将需要测试的所有代码移到此类库中,并将其.h.lib包含到您的可执行文件中
  3. 对您的Test项目
  4. 执行相同的操作

    我将尝试用下一个例子解释我的想法:

    项目MyProject

    main.cpp中:

    #include "my_vector.h"
    #include "my_matrix.h"
    
    int main()
    {
        MyVector vect;
        MyMatrix matrix;
    
        // some operations with vect and matrix
    }
    

    my_vector.h:

    #pragma once
    
    struct MyVector
    { 
        // fields and methods for MyVector
    }
    

    my_vector.cpp:

    #include "my_vector.h"
    
    // definitions of methods for MyVector
    

    my_matrix.h:

    #pragma once
    
    struct MyMatrix
    { 
        // fields and methods for MyMatrix
    }
    

    my_matrix.cpp:

    #include "my_matrix.h"
    
    // definitions of methods for MyMatrix
    

    项目Test

    main.cpp中:

    // depends on what testing framework do you use
    

    my_vector_test.cpp:

    #include "my_vector.h"
    
    // code for MyVector testing
    

    my_matrix_test.cpp:

    #include "my_matrix.h"
    
    // code for MyMatrix testing
    

    你做了什么:

    1. 保留MyProject仅文件main.cpp
    2. 添加项目MyMath并将my_vector.hmy_vector.cppmy_matrix.hmy_matrix.cpp移至
    3. MyMath.lib添加到MyProject
    4. 的链接
    5. MyMath.lib添加到Test
    6. 的链接
    7. 利润!

答案 1 :(得分:0)

这个问题很老了,已经有了答案,但我觉得值得一提的是另一种解决测试项目中包含cpp文件问题的方法。

我最近遇到了这个问题,因为我负担不起将所有要测试的内容封装在一个 lib 静态项目中,所以我最终在测试项目中进行了统一构建。

Unity build consite 在测试项目中有一个 cpp 文件,通常称为“UnityBuild.cpp”。在其中,您必须包含“#include”所有您想要的 cpp 文件。

关于 Unity Builds 的更多信息(它很旧,但是很好读) https://buffered.io/posts/the-magic-of-unity-builds/