我应该将单元测试放在单独的库中吗?单独的子目录

Should i put unit tests in a separate library? Separate subdirectory?

本文关键字:单独 子目录 我应该 单元测试      更新时间:2023-10-16

我有一个大型代码库,其中包含一些(太少)单元测试;我正在向库中添加代码,尝试对新代码进行单元测试(我还想在将来有更多经验时为旧代码添加单元测试)。

我们目前使用一个自定义的(不是很详细)单元测试框架;我想切换到boost.test

我的库布局是:

  • mylib1(300个文件,70000行代码)

    • 来源
      • 噗��
        • 呜.cpp
        • foo_part.cpp
        • foo_part.h
        • 单元测试 - 我应该把它移到mylib之外吗?
          • foo_test1.cpp
          • foo_test2.cpp
          • foo_test3.cpp
      • 酒吧
        • 酒吧.cpp
        • bar_part.cpp
        • bar_part.h
        • 单元测试 - 它属于这里吗?
          • bar_test1.cpp
          • bar_test2.cpp
          • bar_test3.cpp
    • 包括
      • 福.H
      • 酒吧.H
  • mylib2 (70 个文件, 7000 行代码)

    • 看起来像上面的 mylib1
  • 单元测试框架

    • 来源
      • MockObject1.cpp - 它属于这里吗?
      • 断言者.cpp - boost.test将替换它
      • 测试夹具.cpp - boost.test将替换它
    • 包括
      • 模拟对象1.h
      • Asserter.h - boost.test将替换它
      • TestFixture.h - boost.test将替换它

我在这里问以下问题:

  • 单元测试是否应该成为mylib DLL 的一部分?(我将mylib1mylib2链接到一个DLL)
  • 单元测试的源代码是否应该位于mylib1目录下?
  • 既然我有mylib1mylib2,那么相应的单元测试应该如何定位 - 在兄弟目录中,一起等?
  • 我应该把模拟对象的源代码放在哪里?(他们同时服务于mylib1mylib2
  1. 单元测试是一种文档,因此我会保持目录结构不变
  2. 模拟/假货是单元测试中的帮助程序,因此我不会将它们留在源目录中。在源中创建一个新目录,并将它们移动到该目录。

实际上,我会进一步简化它:

 + mylib1 (300 files, 70000 lines of code)
    + unit_tests
      + test_foo.cpp
      + test_bar.cpp
    + mocks
      + mock_foo.hpp
      + mock_bar.hpp
    + foo.cpp
    + foo.hpp
    + bar.cpp
    + bar.hpp
 + mylib2
similar as for mylib1