【发布时间】:2015-12-21 05:40:54
【问题描述】:
游戏.php
<?php
class Game
{
public $db;
public function __construct()
{
$this->db = new DB;
}
public function result()
{
return $this->db->data();
}
}
DB.php
<?php
class DB
{
public function data()
{
return false;
}
}
GameTest.php
<?php
use Mockery as m;
class GameTest extends PHPUnit_Framework_TestCase
{
public function testResult()
{
$game = m::mock(new Game);
$game->shouldReceive('data')
->once()
->andReturn(true);
$expected = $game->result();
$this->assertTrue($expected);
}
public function tearDown()
{
m::close();
}
}
这是我的解决方案但完全不起作用,我想如果我想从__construct 获取设置我需要模拟一个新类,我收到消息Failed asserting that false is true. 这意味着模拟的东西不起作用,如何处理用它?
【问题讨论】:
-
以前从未使用过 Mockery,但看起来您在这里有一个 Game 对象模拟,并且正在模拟其中 Db 对象的方法?
-
是的,通常我们会使用依赖注入,但我正在尝试使用 Mockery 的所有可能性
-
data() 不是 Game 对象的方法。据我了解, shouldReceive() 接受存在于您的模拟对象中的方法名称
-
true,hackmd.io/s/4yq_hHhA,这就是我模拟内部方法的方式,我只是尝试做同样的事情