热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

当我将MockBuilder用于接口时,PhpUnit得到了正确的类

如何解决《当我将MockBuilder用于接口时,PhpUnit得到了正确的类》经验,为你挑选了1个好方法。

我有以下课程

namespace MyApp;

use MyApp\SomeInterface;

class MyClass
{
  public function __construct(SomeInterface $s)
  {
    //Some Logic here
  }

  //Another methods implemented There
}

SomeInterface包含以下内容:

namespace MyApp

interface SomeInterface
{
  /**
  * @return SomeObject
  */
  public function someMethodToImpement();
}

我想在我的phpunit测试类上创建一个模拟:

namespace Tests\MyApp;

use PHPUnit\Framework\TestCase;
use MyApp\MyClass;
use MyApp\SomeInterface;

class MyClassTest extends TestCase
{
   public function someTest()
   {

     $fakeClass=new class{
          public function myFunction($arg1,$arg2)
          {
            //Dummy logic to test if called
            return $arg1+$arg2;
          }
     };

     $mockInterface=$this->createMock(SomeInterface::class)
      ->method('someMethodToImpement')
      ->will($this->returnValue($fakeClass));

     $myActualObject=new MyClass($mockInterface);
   }
}

但是一旦我运行它,我得到错误:

Tests \ MyApp \ MyClassTest :: someTest TypeError:传递给MyApp \ MyClass :: __ construct()的参数1必须实现接口MyApp \ SomeInterface,PHPUnit \ Framework \ MockObject \ Builder \ InvocationMocker的实例已给出,在/ home / vagrant / code中调用/tests/MyApp/MyClassTest.php在线

您知道为什么会发生这种情况以及如何实际创建模拟接口吗?



1> Dimitrios De..:

而不是通过构造模拟

 $mockInterface=$this->createMock(SomeInterface::class)
      ->method('someMethodToImpement')->will($this->returnValue($fakeClass));

将其分成单独的行:

 $mockInterface=$this->createMock(SomeInterface::class);
 $mockInterface->method('someMethodToImpement')->will($this->returnValue($fakeClass));

并且会像魅力一样工作。


推荐阅读
author-avatar
倒退淂磁带_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有