Php 菲普尼特孤立世界
我刚刚开始使用PHPUnit。在此之前,我使用了RSpec和Cucumber,以及它们的隔离环境,它们非常好。 我已经完成了我的第一个phpunit测试并创建了两个模拟类,我想知道它们是否会留在我的下一个测试中,并且,正如我所推测的,它们会 现在,我正在考虑为所有这些助手使用一个真正特定的名称空间,如下所示:Php 菲普尼特孤立世界,php,unit-testing,tdd,phpunit,Php,Unit Testing,Tdd,Phpunit,我刚刚开始使用PHPUnit。在此之前,我使用了RSpec和Cucumber,以及它们的隔离环境,它们非常好。 我已经完成了我的第一个phpunit测试并创建了两个模拟类,我想知道它们是否会留在我的下一个测试中,并且,正如我所推测的,它们会 现在,我正在考虑为所有这些助手使用一个真正特定的名称空间,如下所示: <?php namespace Subject; class FirstDependency { /* ... */ } class TestableSubject extends
<?php
namespace Subject;
class FirstDependency { /* ... */ }
class TestableSubject extends \Subject { /* ... */ }
class SubjectTest extends \PHPUnit_Framework_TestCase {
/* tests */
}
那么您将测试与实现放在一起了?“哪一个更快”——没关系。“任何更好的方法”——是的,显式地传递依赖项(通过方法或构造函数)。“创建了2个模拟类”-你通常创建模拟对象,而不是类。不,我没有。测试和实现区域显然位于它们自己的文件中。我把测试单元和它的助手放在一起,比如FirstDependency
mock类。我已经读过PHPUnit的模拟实用程序,但现在我觉得自己的工具更合适。如果你把它们分开保存,你不清楚名称空间到底有什么问题。“有没有更好的方法来做到这一点”,“我对自己的感觉更舒服”-你为什么要问这个问题?你可以创建一个模拟对象(就像在任何其他测试环境和语言中一样,包括但不限于:javascript、java、c)。然后使用任何您喜欢的依赖项注入技术(setter注入、构造函数注入,甚至使用反射的属性注入)将对象作为显式依赖项传递,我理解。或者:a)修改代码以测试它(如果你遵循tdd,你就不会被实际卡在里面)。b) 创建部分模拟(仍然是对象)。