【问题标题】:Better way to include .cpp files in Test Project?在测试项目中包含 .cpp 文件的更好方法?
【发布时间】:2015-12-11 21:29:29
【问题描述】:

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

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

非常感谢。

【问题讨论】:

  • 从代码中创建一个库进行测试,并将该库链接到您的测试项目。
  • 我读到这是一种方法,但如果可以,我想避免它。
  • “我想避免它。” 为什么?有什么具体原因吗?
  • 需要另一个项目并将代码库拆分得更多。这主要是审美问题。
  • 为测试代码有一个单独的项目,并为被测代码提供一个模块化的库,这实际上很好而且很干净。我看不出在一个大型项目中拥有一堆意大利面条式的文件更美观。

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    你可以按照下一个方式:

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

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

    项目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. 添加MyMath.lib 以链接Test
    5. 利润!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      相关资源
      最近更新 更多