У меня есть 3 класса.
class Box{
public $item1;
public $item2;
public function __construct($item1,$item2){
$this->item = $item1;
$this->item2 = $item2;
}
public function getItem1(){
return $this->item1;
}
}
class Details{
public $stuff
public $item1;
public $item2;
public $item3;
public function __construct($stuff){
$this->stuff = $stuff
}
public function setItem1($item){
$this->item1 = $item;
}
public function setItem2($item){
$this->item2 = $item;
}
}
class Crate{
public $box;
private $stuffString = "Stuff";
public function __construct(Box $box){
$this->box = $box;
}
public function getDetails(){
$details = new Details($stuffString);
$details->setItem1($box->item1);
$details->setItem2("Detail");
return $details;
}
}
Метод Crate->getDetails()
возвращает объект Details с данными из объекта Box. Я хочу написать тесты для этого метода.
function test_get_details(){
$box = Mockery::mock(Box::class);
$box->shouldReceive('getItem1')->andReturn("BoxItem");
$crate= new Crate($box);
$details = $crate->getDetails();
$this->assertInstanceOf(Details::class,$details);
}
Я создаю макет класса Box и передаю его конструктору Crate. Когда я вызываю $crate->getDetails();
, он должен вернуть объект Details с
- $ item1 = "BoxItem"
- $ item2 = "Detail"
- $ item3 = null
Я знаю, что могу проверить это, выполнив для каждого элемента $this->assertEquals("BoxItem",$details->item1);
et c ... но разве это лучший способ go? Есть ли какой-нибудь инструмент PHPUnit для создания желаемого результата Detials и сравнения его
Например
$this->assertEquals(MockDetailObject,$details)
или мне нужно сделать серию утверждений, чтобы сделать уверен, что результат - то, что я ожидаю.
Примечание *
Я знаю для своего примера, что это не так уж сложно, я быстро объяснил, что я имею в виду. Но в коде, над которым я работаю, я столкнулся с такой же проблемой, за исключением того, что объект Details сложнее, чем просто 3 строки.