【问题标题】:Should i put unit tests in a separate library? Separate subdirectory?我应该将单元测试放在单独的库中吗?单独的子目录?
【发布时间】:2012-06-25 14:49:59
【问题描述】:

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

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

我的图书馆布局是:

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

        • foo.cpp
        • foo_part.cpp
        • foo_part.h
        • UnitTests - 我应该把它移到mylib之外吗?
          • foo_test1.cpp
          • foo_test2.cpp
          • foo_test3.cpp
      • 酒吧
        • bar.cpp
        • bar_part.cpp
        • bar_part.h
        • UnitTests - 它属于这里吗?
          • bar_test1.cpp
          • bar_test2.cpp
          • bar_test3.cpp
    • 包括
      • foo.h
      • bar.h
  • mylib2(70 个文件,7000 行代码)

    • 看起来像上面的mylib1
  • UnitTestFramework

      • MockObject1.cpp - 它属于这里吗?
      • Asserter.cpp - boost.test 将替换它
      • TestFixture.cpp - boost.test 将替换它
    • 包括
      • MockObject1.h
      • Asserter.h - boost.test 将替换它
      • TestFixture.h - boost.test 将替换它

我在这里问以下问题:

  • 单元测试应该是mylib DLL 的一部分吗? (我将mylib1mylib2 链接到一个DLL 中)
  • 单元测试的源代码应该放在mylib1目录下吗?
  • 既然我有mylib1mylib2,那么对应的单元测试应该如何定位——在同级目录中,一起等等?
  • 我应该把模拟对象的源代码放在哪里? (他们同时提供 mylib1mylib2

【问题讨论】:

    标签: c++ unit-testing code-organization boost-test


    【解决方案1】:
    1. 单元测试是一种文档,因此我将保持目录结构不变
    2. mocks/fakes 是单元测试中的助手,因此我不会将它们留在源目录中。在源中创建一个新目录,并将它们移动到那里。

    其实我会进一步简化:

     + 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
    

    【讨论】:

    • 我不可能通过将所有 300 个文件放入一个目录来“简化”树结构。所以我猜这个答案主要是说“不要改变单元测试的位置,它们在正确的位置”。
    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多