在单元测试中模拟PHP函数

avd*_*aag 12 php unit-testing simpletest mocking

我用SimpleTest对一些PHP代码进行单元测试,但我遇到了麻烦.在我对数据库类的测试中,我希望能够为PHP mysql函数设置期望.在我的mail函数包装类的测试中,我想模拟PHPs mail函数.这只是一些例子.

关键是:我不(总是)想测试我的Mail类是否发送电子邮件,我想测试它如何调用该mail函数.我希望能够控制这些函数返回的内容.我希望能够测试我的数据库类,而不需要数据库,灯具和那么多.

我有一些测试Ruby代码的经验,而Test :: Unit和RSpec使得单独测试代码变得非常容易.我是测试PHP的新手,感觉我测试的内容比我需要的要多得多,以便让我的测试通过.

在SimpleTest或PhpUnit或其他一些测试框架中是否有办法使这成为可能或更容易?

tro*_*skn 10

不是以自动方式.你可以做的是编写代码,使外部依赖包装在从外部传入的对象中.在您的生产环境中,您只需连接真正的适配器,但在测试期间,您可以将其连接到存根或模拟.

如果你真的坚持,你可以使用runkit扩展来改变php的编程模型,这样你就可以在运行时重新定义类和函数.这是一个外部和非标准的扩展,但是,请记住这一点.如上所述,事实上的标准是手动方法.