0
내 코드는 조롱 된 객체가 메소드를 가졌는지 여부에 따라 분기됩니다.is_callable on Mockery :: mock() 항상 true를 반환합니다.
실제 클래스에는 메소드 존재를 확인하는 2 가지 옵션이 있습니다. is_callable
및 method_exists
입니다.
// Defining mocks for test
$emptyMock = m::mock();
$mockWithExpectation = m::mock()
->shouldReceive('foo')
->andReturn('bar')->getMock();
// Trying to perform checks inside of tested class
method_exists($emptyMock, 'foo'); // false
method_exists($mockWithExpectation, 'foo'); // false
is_callable([$emptyMock, 'foo']); // true
is_callable([$mockWithExpectation, 'foo']); // true
모의에서 이러한 메소드를 호출 해 봅시다.
$emptyMock->foo(); // \BadMethodCallException
$mockWithExpectation->foo(); // 'bar'
실례로, 메소드가 올바르게 실행/실패합니다.
테스트 된 클래스가 모의 객체를 처리하고 있음을 명시 적으로 알지 못하고 메소드가 호출 가능한지 여부를 알아낼 수 있습니까?
미리 도움을 주셔서 감사합니다.
객체가 구현 된 마법 __call() 메소드가있는 경우, 다음 is_callable() method_exists()는 FALSE를 반환합니다 반면, 어떤 존재하지 않는 방법에 대한 TRUE를 반환합니다. – Matteo