Ich bin ein Neuling Entwickler versucht, eine Testsuite für eine bestehende Laravel App zu schreiben. Derzeit versuche ich, Tests für einen Controller zu schreiben, aber das verwendete Authentifizierungssystem ist seltsam implementiert und schwierig zu umgehen. Ich kann nicht einfach:PHP Aufruf einer Methode auf einer ReflectionClass
Ich muss den Controller instanziieren und eine private Eigenschaft in seiner Basisklasse festlegen. Um dies zu umgehen, versuche ich die Reflektion zu verwenden und die Konstruktoreigenschaften und die Benutzereigenschaft manuell einzustellen. Mein Problem tritt auf, wenn ich versuche, die Methode auf dem Reflexionsobjekt aufzurufen, und ich weiß nicht, wie ich es umgehen soll. Meine Testmethode:
public function testCount()
{
$user = \User::find(1);
$this->be($user);
$leadRepositoryInterface = m::mock('CRM\Storage\Lead\LeadRepositoryInterface');
$response = m::mock('ColorJar\ApiResponse\Response');
$leadsController = new ReflectionClass('LeadsController');
$leadsControllerLead = $leadsController->getProperty('lead');
$leadsControllerLead->setAccessible(true);
$leadsControllerResponse = $leadsController->getProperty('response');
$leadsControllerResponse->setAccessible(true);
$leadsControllerCrmuser = $leadsController->getProperty('crmUser');
$leadsControllerCrmuser->setAccessible(true);
$leadsControllerLead->setValue($leadsController, $leadRepositoryInterface);
$leadsControllerResponse->setValue($leadsController, $response);
$leadsControllerCrmuser->setValue($leadsController, $user);
$reflectionMethod = new ReflectionMethod('ReflectionClass', 'count');
$this->assertEquals('jdsf', $reflectionMethod->invoke($leadsController));
}
erzeugt die folgenden Fehler:
LeadsControllerTest::testCount
ReflectionException: Method ReflectionClass::count() does not exist
Ich weiß, dass ich rufe count() auf einer Instanz von Reflection statt LeadsController aber ich weiß nicht, wie sonst zu Legen Sie diese Eigenschaften fest, insbesondere crmUser, da es eine private Eigenschaft der Klasse ist, von der LeadsController erbt. Wie mache ich das?
Sie sollten korrekte Klasse oder Objekt angeben: new ReflectionMethod ('ReflectionClass', 'count'); im Parameter 'ReflectionClass' –
Das habe ich zuerst ausprobiert. Wenn ich dort 'LeadsController' liefere, erhalte ich den folgenden Fehler: ReflectionException: Gegebenes Objekt ist keine Instanz der Klasse, in der diese Methode deklariert wurde – brianfr82
Versuchen Sie 'ReflectionClass' (string) zu $ leadsController zu ersetzen –