我们如何针对源代码布置测试代码

时间:2013-06-18 20:16:06

标签: testing architecture

那么目标是什么:

  1. 测试隔离意味着测试代码无法与源访问,因为他可能会导致安全问题并导致漏洞。

  2. 我们可以扩展和推广测试框架,而不仅仅是测试特定来源。

  3. 无论源更改

  4. ,我们都可以进行重构和改进
  5. 由于隔离,我们可以尝试针对各种源代码分支运行相同的测试框架

  6. 测试代码,运行时或溢出的性能问题不会直接影响测试运行,因为我们可以轻松地恢复到性能良好的测试框架版本。

  7. 问题:

    测试代码和源代码应该在同一个分支中吗?我们如何设置它?那怎么会让我们说颠覆,什么是利弊?

1 个答案:

答案 0 :(得分:1)

问题有点不精确 - 我假设您的问题涉及单元测试代码,而不是验收测试,性能测试等。

首先要考虑的是测试代码与被测代码之间存在紧密耦合。你需要管理这种依赖;你如何管理它在很大程度上取决于你的发展战略。如果您使用分支来分隔功能或版本,我会将该分支的测试代码放在同一分支中 - 您不能指望它可以处理来自另一个分支的代码。为测试代码添加单独的分支会使事情变得更复杂,而不必增加任何好处。

其次 - 希望显然 - 您需要管理依赖项。您的测试代码取决于测试中的代码;被测代码不应该依赖于测试代码。使用JDepend或NDepend等工具可以监视这些依赖关系。从测试代码中明确管理依赖项通常是个好主意 - 如果您发现所有测试都依赖于代码中测试中的单个类,那么如果出现问题,该依赖项可能会破坏每个测试。

现在,为了回答您的具体问题,我将假设您在SVN中有(主要)功能的分支,并且您已经设置了标准项目结构,

 \src   
   \app
   \test   

应用程序代码位于“app”文件夹中; “test”目录中的测试代码。

在这种情况下,您的SVN可能是:

\trunk
  \app
     \com.me.app.views
     \com.me.app.models
     \com.me.app.controllers
  \test
     \com.me.app.tests.views
     \com.me.app.tests.models
     \com.me.app.tests.controllers
\branches
  \feature1
     \app
        \com.me.app.views
        \com.me.app.models
        \com.me.app.controllers
     \test
        \com.me.app.tests.views
        \com.me.app.tests.models
        \com.me.app.tests.controllers
  \feature2
     \app
        \com.me.app.views
        \com.me.app.models
        \com.me.app.controllers
     \test
        \com.me.app.tests.views
        \com.me.app.tests.models
        \com.me.app.tests.controllers