加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

带闭包的PHPUnit测试

发布时间:2020-12-13 13:39:32 所属栏目:PHP教程 来源:网络整理
导读:这试图为一个类的方法编写一个测试,该方法使用闭包调用mock方法.你如何验证被关闭的封锁? 我知道你可以断言参数是Closure的一个实例.但是你会怎么检查关闭的内容? 例如,如何验证传递的函数: class SUT { public function foo($bar) { $someFunction = fun
这试图为一个类的方法编写一个测试,该方法使用闭包调用mock方法.你如何验证被关闭的封锁?

我知道你可以断言参数是Closure的一个实例.但是你会怎么检查关闭的内容?

例如,如何验证传递的函数:

class SUT {
     public function foo($bar) {
         $someFunction = function() { echo "I am an anonymous function"; };
         $bar->baz($someFunction);
     }
 }

 class SUTTest extends PHPUnit_Framework_TestCase {
     public function testFoo() {
         $mockBar = $this->getMockBuilder('Bar')
              ->setMethods(array('baz'))
              ->getMock();
         $mockBar->expects($this->once())
              ->method('baz')
              ->with( /** WHAT WOULD I ASSERT HERE? **/);

         $sut = new SUT();

         $sut->foo($mockBar);
     }
 }

你不能比较PHP中的两个闭包.在PHPUnit中有没有办法执行传入的参数或以某种方式验证?

你的问题是你不注意你的依赖(关闭),这总是使得单元测试变得更加困难,并且可以使隔离成为可能.

将封装插入到SUT :: foo()中,而不是在其中创建它,您会发现测试更容易.

这是我如何设计方法(记住我对于你的真实代码一无所知,所以这可能或可能不实用):

class SUT 
{
    public function foo($bar,$someFunction) 
    {
        $bar->baz($someFunction);
    }
}

class SUTTest extends PHPUnit_Framework_TestCase 
{
    public function testFoo() 
    {
        $someFunction = function() {};

        $mockBar = $this->getMockBuilder('Bar')
             ->setMethods(array('baz'))
             ->getMock();
        $mockBar->expects($this->once())
             ->method('baz')
             ->with($someFunction);

        $sut = new SUT();

        $sut->foo($mockBar,$someFunction);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读