当前位置: 首页 > 知识库问答 >
问题:

存根对象正在codeception中调用实方法

涂溪叠
2023-03-14

我正在尝试使用codeception和他的Mock和Stub库运行测试。发生的事情是,当我试图用存根运行测试时,它引发了一个在我的实际类中实现的错误。

我认为存根是隔离测试和模拟真实对象的方法。为什么它叫我真正的方法?

<?php

class FirstDegreeTest extends \Codeception\TestCase\Test
{
  /**
   * @var \UnitTester
   */
  protected $tester;

  protected function _before()
  {
    $this->max_threads = 30;
    $this->firstDegree = new AlThread\LoadControl\Measurer\FirstDegree($this->max_threads);

    $sensor = Stub::make("AlThread\LoadControl\Sensor\LoadAvg", array("getSystemLoad", Stub::consecutive(0, 1, -3, 1.1, null)));

    $this->firstDegree->setSensor($sensor);
  }

  public function testMeasure()
  {    
    $this->assertEquals(30, $this->firstDegree->measure());
  }
}
?>

所以当我运行代码欺骗(PHPcodeception.phar运行):

Time: 487 ms, Memory: 11.25Mb

There was 1 error:

---------
1) Test me (FirstDegreeTest::testMeasure)

  [PHPUnit_Framework_Exception] rewind() expects parameter 1 to be resource, null given
                                                                                                 #1  Codeception\Subscriber\ErrorHandler->errorHandler
#2  /home/AlThread/src/LoadControl/Sensor/LoadAVG.php:42
#3  /home/AlThread/src/LoadControl/Sensor/LoadAVG.php:55
#4  /home/AlThread/src/LoadControl/Sensor/LoadAVG.php:49
#5  /home/AlThread/src/LoadControl/Sensor/LoadAVG.php:61
#6  /home/AlThread/src/LoadControl/Sensor/LoadAVG.php:67
#7  /home/AlThread/src/LoadControl/Sensor/LoadSensor.php:10
#8  /home/AlThread/src/LoadControl/Measurer/LoadMeasurer.php:32
#9  /home/AlThread/tests/unit/FirstDegreeTest.php:31
#10 FirstDegreeTest->testMeasure

FAILURES!
Tests: 3, Assertions: 2, Errors: 1.

问题是:

[PHPUnit_Framework_Exception] rewind() expects parameter 1 to be resource, null given

回溯会一直持续到类LoadAVG的真正实现,在这里我真正调用了rewind()函数,很明显,一旦这个类没有合适的运行环境,就会引发一个错误。

会不会是我想Stubs的方式不对?

非常感谢你。

共有1个答案

闾丘才哲
2023-03-14

你给Stu做的参数b::错了应该是个关联数组

$sensor = Stub::make("AlThread\LoadControl\Sensor\LoadAvg", array("getSystemLoad"=>Stub::consecutive(0, 1, -3, 1.1, null)));
 类似资料:
  • 如何使用Spock截尾void方法?

  • 我是Java初学者。我想在运行的Java线程对象中调用一个方法。它总是引发以下异常: 线程“AWT-EventQueue-0”java中出现异常。lang.NullPointerException:无法调用“Graphic\u handler.next()”,因为“this.this$0.grap”为null (代码已简化) 下面是我调用该方法的代码部分: 我试图在这里调用方法Next()和las

  • 我试图对模型的对象调用方法来更新数据库中的特定资源,但当我在api url上发送POST请求时,会出现此错误 方法照明\数据库\雄辩\集合::保存不存在。 我也尝试调用方法,但同样的错误。 编辑代码: 第一行返回响应和正确响应。 和 我还试图调用或方法来删除资源,但它也会给出相同的错误 BadMethodCallException:方法Illumb\Database\Eloquent\Collec

  • 我创建了一个静态变量来保存应用程序上下文,因为我要在课堂上的其他地方使用它。这个变量被分配到类的构造函数中,我得到了以下错误——“不要将Android上下文类放在静态字段中(静态引用MyClass,其中字段appContext指向上下文);这是内存泄漏(也会中断即时运行)[StaticFieldLeak]。” 下面是MyClass中的代码: 为了解决这个问题,我考虑将appContext作为弱引用

  • 为什么mockito打电话为存根方法。 为什么它使一个实际调用func下当... then返回我已经检查了当做调试。

  • 本文向大家介绍在Java中使用反射调用对象的方法,包括了在Java中使用反射调用对象的方法的使用技巧和注意事项,需要的朋友参考一下 可以使用java.lang.Class.getDeclaredMethods()方法调用对象的方法。此方法返回一个数组,其中包含具有公共,私有,受保护和默认访问权限的所有Method对象。但是,不包括继承的方法。 另外,如果类或接口没有方法,或者在Class对象中表示