0

那么这里的目标是什么:

  1. 测试隔离意味着,测试代码无法通过源代码访问,因为它会导致安全问题,并引发漏洞。

  2. 我们可以扩展和概括测试框架,而不仅仅是测试特定的源。

  3. 无论源代码更改如何,我们都可以进行重构和改进

  4. 由于隔离,我们可以尝试针对不同的源代码分支运行相同的测试框架

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

问题:

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

4

1 回答 1

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
于 2013-06-18T20:58:06.343 回答