标记单元测试

时间:2009-04-12 21:13:25

标签: performance unit-testing continuous-integration phpunit tagging

我正在开发一个具有可靠单元测试覆盖率的PHP项目。

我注意到,上一次,我使用单元测试命令行测试运行器' - filter 命令进行非常棘手的操作。

以下是官方文档中此命令的解释:

  
    

- 过滤器

         

仅运行名称与给定模式匹配的测试。模式可以是单个测试的名称,也可以是与多个测试名称匹配的正则表达式。

  

我总是使用它,因为有时从整个测试库运行一个测试套件或测试用例变得非常有用。

我想知道这是不是很好的做法?

我听说有时候在持续集成机器上运行整个测试套件是好的做法,如果您确定您只修改了一个组件且 100%自信百分比,它不会失败其他组件的单元测试。 你觉得怎么样?

前段时间我认为我们不应该太在意运行整套所有单元测试的时间,但是当你有非常复杂的业务逻辑和单元测试时 - 这可能需要很长时间。 / p>

据我所知,“真正的”单元测试不应该与DB交互,使用mock / stubs对象,我同意这一点。但有时,使用DB夹具进行测试会更容易(更便宜)。

请给我一些建议,如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

良好的单元测试应该:

  • 有明确的方法名称和变量名称作为文档
  • 跑得快。这也是可能的 用于复杂业务的测试 逻辑。测试应该在avarage中运行 约0.1秒的时间。
  • 在一个测试方法中完全测试一件事
  • 不与文件系统,电子邮件等外部资源集成 数据库,Web服务和 其他一切。你可以创建 单独的数据库集成测试 测试你的数据库错误。 这些测试会慢于你的单位 大部分时间都在测试。我把我的 单独的集成测试 项目,我只在我的时候运行它们 致力于集成代码。一世 也可以在CI上的所有构建上运行它们 服务器。
  • 完全相互隔离。当你有测试时 在彼此,你不能看到什么 你的问题来自阅读 测试失败。你可能不得不这样做 调试以找到问题。隔离的 测试将为您节省大量时间。

就个人而言,我在测试中不使用类别名称。我每个应用程序使用2个测试项目。一个用于单元测试,一个用于集成测试和慢速测试。

反应:

  

“但有时,它很多   更容易(更便宜)使用数据库固定装置   测试。“

当你的代码编写得很好时,它会更容易模拟。我不知道在Php中嘲笑框架,但我在其他语言中使用它们来节省我很多时间。首先编写测试和稍后编写代码可能有助于您设计代码以便更容易测试。

我个人学会了通过

更好地测试
  • 阅读关于它的博客
  • 阅读有关它的书籍
  • 阅读其他人编写的测试代码
  • 当然要写很多测试。我花了好几个测试来擅长它。

答案 1 :(得分:1)

  

我总是使用它,因为有时从整个测试库运行一个测试套件或测试用例变得非常有用。

     

我想知道这是不是很好的做法?

当然,只要您偶尔运行全套单元测试(通过CI服务器听起来很完美)

定期运行“有趣”测试比很少运行所有测试更好..

答案 2 :(得分:0)

我通过让一部分测试(“冒烟测试”)花费1分钟或更短时间来解决这个问题,必须在提交之前运行,然后运行您的全套测试CI服务器。

如果您的全套测试需要> 15分钟然后我会把它们分开并同时运行它们。

然后,您可以使用--filter首先运行您最感兴趣的测试,然后在提交之前运行冒烟测试,并使其余部分从CI服务器运行。