php – 共享单元测试夹具

我正在编写一个项目的单元测试(用 PHP编写,使用 PHPUnit),它的整个环境(加载的组件,事件,配置,缓存,每个环境单例等)保存在一个对象中,所有组件都使用它来进行交互彼此(使用中介模式).

为了使单元测试运行得更快,我正在共享环境对象和一些其他对象(例如,在我的测试用例中用于视图对象[如在MVC的V中],视图管理器对象[充当视图对象的工厂,负责实际渲染])在同一测试用例中的测试中(使用PHPUnit的setUpBeforeClass()和静态属性).

尽管如此,据我所知,我共享的对象不应影响测试的完整性(例如,在视图的情况下,环境和视图管理器对象是共享的,但是为每个对象创建了一个单独的视图对象测试 – 这是测试用例实际测试的对象),它对我来说感觉越来越不对.

如果每个测试使用完全隔离的环境并且不能以任何方式影响同一测试用例中的其他测试,我宁愿使用它.然而,这会使测试运行得慢得多,感觉价格很高,我无法确切地指出其缺点,主要是“感觉不对”.

你怎么看?你能否指出任何缺点,以便我可以说服自己值得更长的执行时间?或者我只是过度反应而且完全没问题?

就像编写“普通”代码一样,在编写测试用例时,可以依赖于夹具对象的工作原理.

如果给定的工厂方法被记录为每次都生成新实例,那么我每次都会看到重新创建工厂方法的缺点,特别是如果工厂创建本身很昂贵的话.

它有助于牢记编写单元测试的关键目标.你想在5-10分钟内知道你是否打破了构建.这样你就可以出去吃午饭,去参加会议,回家等等.如果您知道夹具的某些部分可以重复使用而不创建交互,那么您应该使用该知识在5-10分钟的窗口内使测试更加全面.我理解这里的纯粹主义冲动,但它在测试独立性方面没有给你带来任何好处,并且不必要地限制了你的测试套件将为你完成的任务.

本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院