3

我能想到的两个明显的地方是我正在处理的代码旁边的某种“测试”文件夹。所以像:

\project-code
    \my-feature
        \production-code
        \testing
            ***my tests***
    \co-workers-feature
        \production-code
        \testing

或者我可以将测试代码拆分为一个完全独立的层次结构。所以像:

\project-code
    \my-feature
    \co-workers-feature
\testing-project-code
    \my-feature
        ***my tests***
    \co-workers-feature

我见过很多框架使用第二种方法,但最近我们一直将测试代码放在生产代码中,主要是为了方便。一种方法比另一种方法好得多,还是这里有最佳实践?

4

5 回答 5

2

把它们放在你最方便的地方。如果需要,您可以设置构建系统以将它们从最终产品中删除。测试是一种“最佳实践”。任何在不降低其有效性的情况下使测试更容易的事情都只是对最佳实践的改进。

于 2009-12-10T17:51:49.860 回答
1

我使用第二个选项。这意味着如果需要,我可以在没有测试的情况下发布代码。同样通过查看类或包,我知道它的单元测试在哪里。

这是一个相关的问题:

你将单元测试放在同一个项目还是另一个项目中?

于 2009-12-10T17:55:42.657 回答
1

我更喜欢保持单元测试关闭。我已经看到选项 1 运作良好。对于一个小项目,这两种方法都可以正常工作,但是随着项目变得越来越大,当测试位于树的一个非常不同的部分时,很难找到和维护它们。如果它们很接近,那么在您更改产品代码时更改它们是很自然的。如果距离较远,则需要更多的精神努力,并且会被更多地忽略。这意味着它们不同步的可能性更大。

请注意,要做到这一点,您需要一个允许对测试目录进行条件编译的 make 系统。您不想每次都构建它们。如果您无法做到这一点,则可能需要一棵单独的树。

于 2009-12-12T09:23:49.193 回答
0

如果它是您控制的网站,那么将它们全部放在同一个文件夹中并没有什么坏处。如果它是您发布的经典软件,那么最好将其分开(如案例 2),这样您在发布时不会意外导致任何膨胀。

于 2009-12-10T17:46:05.143 回答
0

对我来说,第一个选项更有意义,尤其是从 SCM 的角度来看:生产代码和测试代码很好地保持同步(因为它们应该),如果你标记或分支你的项目,你标记或分支生产和同时测试代码(他们应该这样做)。

于 2009-12-10T17:55:23.083 回答