我该如何在项目中组织测试用例?

时间:2009-09-14 15:06:36

标签: c++ unit-testing

我有一个看起来像这样的项目:

xdc/
  hubactions/
    hubconnection.cpp
    hubconnection.h
  uiinterface/
    readme
    uiconnection.cpp
    uiconnection.h
    ...
  uiactions/
    readme
    connectaction.cpp
    connectaction.h
    quitaction.cpp
    quitaction.h
    ...
  utils/
    parser.cpp
    parser.h
    ...

现在我想在项目变得太大之前开始测试。

那么我应该如何组织我的测试呢?我提出了两个选择:

选项1

xdc/
  hubactions/
    hubconnection.cpp
    hubconnection.h
  uiinterface/
    readme
    uiconnection.cpp
    uiconnection.h
    ...
  uiactions/
    readme
    connectaction.cpp
    connectaction.h
    quitaction.cpp
    quitaction.h
    ...
  utils/
    parser.cpp
    parser.h
    ...
  tests/
    utils/
      parsertest.cpp
    uiinterface/
      uiconnectiontest.cpp
    uiactions/
      connectactiontest.cpp
      quitactiontest.cpp
    hubactions/
      fakehubconnection.cpp
      fakehubconnection.h
    ...

选项2

xdc/
  hubactions/
    tests/
      fakehubconnection.cpp
      fakehubconnection.h
    hubconnection.cpp
    hubconnection.h
  uiinterface/
    tests/
      uiconnectiontest.cpp
    readme
    uiconnection.cpp
    uiconnection.h
    ...
  uiactions/
    tests/
      connectactiontest.cpp
      quitactiontest.cpp
    readme
    connectaction.cpp
    connectaction.h
    quitaction.cpp
    quitaction.h
    ...
  utils/
    tests/
      parsertest.cpp
    parser.cpp
    parser.h
    ...

哪种方法更好?我能以不同/更好的方式做到吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

我认为没有'更好'的选择。

我个人认为选项2,因为它使测试在物理上接近被测试的代码。

那就是说,我相信有人会有充分理由使用选项1。

第三个选项(我真的不喜欢)可能是用正在测试的代码存储测试(见下文)。但是,这会使您的目录结构过于混乱

xdc/
  hubactions/
    fakehubconnection.cpp
    fakehubconnection.h
    hubconnection.cpp
    hubconnection.h
  uiinterface/
    uiconnectiontest.cpp
    readme
    uiconnection.cpp
    uiconnection.h
    ...
  uiactions/
    connectactiontest.cpp
    quitactiontest.cpp
    readme
    connectaction.cpp
    connectaction.h
    quitaction.cpp
    quitaction.h
    ...
  utils/
    parsertest.cpp
    parser.cpp
    parser.h
    ...

答案 1 :(得分:1)

选项1的一个参数是,这使得生产代码和测试代码之间的分离更加清晰。因此,测试代码不太可能成为生产代码的一部分。

答案 2 :(得分:1)

我喜欢Apache Software Foundation(ASF)及其主要构建工具Maven所遵循的代码结构。此结构以Java为中心,但可以应用于其他语言。在我看来,best C++ plug-in for Maven遵循C ++的ASF结构,如下所示:

project/
  /src
    /main
      /include
      /c++
    /test
      /include
      /c++

我使用这种结构,效果很好,与我用其他语言编写的项目一致。