Testing 我们如何根据源代码布局测试代码

Testing 我们如何根据源代码布局测试代码,testing,architecture,Testing,Architecture,那么,这里的目标是什么: 测试隔离意味着,源代码无法访问测试代码,因为his可能导致安全问题,并导致漏洞 我们可以扩展和概括测试框架,而不仅仅是测试特定的源代码 无论源代码如何更改,我们都可以进行重构和改进 由于隔离,我们可以尝试对源代码的不同分支运行相同的测试框架 测试代码、运行时或溢出的性能问题不会直接影响测试运行,因为我们可以轻松地恢复到性能良好的测试框架版本 问题: 测试代码和源代码应该在同一个分支中吗?我们如何设置?比如说subversion,它的优点和缺点是什么?这个问题有点不精确-

那么,这里的目标是什么:

  • 测试隔离意味着,源代码无法访问测试代码,因为his可能导致安全问题,并导致漏洞

  • 我们可以扩展和概括测试框架,而不仅仅是测试特定的源代码

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

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

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

  • 问题:


    测试代码和源代码应该在同一个分支中吗?我们如何设置?比如说subversion,它的优点和缺点是什么?

    这个问题有点不精确-我假设你的问题是指单元测试代码,而不是验收测试、性能测试等

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

    其次,很明显,你需要管理依赖关系。您的测试代码取决于被测试的代码;被测代码不应依赖于测试代码。使用诸如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
    

    这取决于你在做什么。例如,我们有一个存储库,但有两个网站。一个是测试站点,我们可以将最新的代码从存储库复制到其中,并在将其投入生产之前对其进行测试。但是如果你不做基于网络的编程,你可能不得不做一些不同的事情。