我正在开发一个具有可靠单元测试覆盖率的PHP项目。
我注意到,上一次,我使用单元测试命令行测试运行器' - filter 命令进行非常棘手的操作。
以下是官方文档中此命令的解释:
- 过滤器
仅运行名称与给定模式匹配的测试。模式可以是单个测试的名称,也可以是与多个测试名称匹配的正则表达式。
我总是使用它,因为有时从整个测试库运行一个测试套件或测试用例变得非常有用。
我想知道这是不是很好的做法?
我听说有时候在持续集成机器上运行整个测试套件是好的做法,如果您确定您只修改了一个组件且 100%自信百分比,它不会失败其他组件的单元测试。 你觉得怎么样?
前段时间我认为我们不应该太在意运行整套所有单元测试的时间,但是当你有非常复杂的业务逻辑和单元测试时 - 这可能需要很长时间。 / p>
据我所知,“真正的”单元测试不应该与DB交互,使用mock / stubs对象,我同意这一点。但有时,使用DB夹具进行测试会更容易(更便宜)。
请给我一些建议,如何解决这个问题?
答案 0 :(得分:1)
良好的单元测试应该:
就个人而言,我在测试中不使用类别名称。我每个应用程序使用2个测试项目。一个用于单元测试,一个用于集成测试和慢速测试。
反应:
“但有时,它很多 更容易(更便宜)使用数据库固定装置 测试。“
当你的代码编写得很好时,它会更容易模拟。我不知道在Php中嘲笑框架,但我在其他语言中使用它们来节省我很多时间。首先编写测试和稍后编写代码可能有助于您设计代码以便更容易测试。
我个人学会了通过
更好地测试答案 1 :(得分:1)
我总是使用它,因为有时从整个测试库运行一个测试套件或测试用例变得非常有用。
我想知道这是不是很好的做法?
当然,只要您偶尔运行全套单元测试(通过CI服务器听起来很完美)
定期运行“有趣”测试比很少运行所有测试更好..
答案 2 :(得分:0)
我通过让一部分测试(“冒烟测试”)花费1分钟或更短时间来解决这个问题,必须在提交之前运行,然后运行您的全套测试CI服务器。
如果您的全套测试需要> 15分钟然后我会把它们分开并同时运行它们。
然后,您可以使用--filter首先运行您最感兴趣的测试,然后在提交之前运行冒烟测试,并使其余部分从CI服务器运行。