我有一个看起来像这样的项目:
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 ...
哪种方法更好?我能以不同/更好的方式做到吗?
谢谢!
答案 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++
我使用这种结构,效果很好,与我用其他语言编写的项目一致。