1. Nie pytaj, bo po prostu nie potrafię odpowiedzieć na to pytanie. Ktoś przede mną w firmie zrobił głupotę i teraz z tego korzystam,
2. Wiem, gdybym robił to od początku, zrobił bym to inaczej.
3. Ogólnie chodzi o to, że nowe funkcjonalności w serwisie piszemy obiektowo, natomiast znaczna większość jest napisana strukturalnie. PM nie pozwolił nam się od tego odciąć (czemu? nie mam pojęcia, nie dało się mu wytłumaczyć), dlatego ktoś kiedyś zrobił klasę, która służy tylko do tego, żeby wyciągać zmienne globalne przez nią - jest napisana z nadzieją, że kiedyś uda nam się odciąć od tych globali, niestety ten ktoś wsadził tam static i zamiast wstrzykiwać odpowiednie zależności do innych klas używał w nich Klasa::get('costam'). W tym co ja pisałem, używając tej klasy, wstrzykiwałem jej obiekt jako zależność, no ale nie mogę tak po prostu usunąć tego "static" - bo inne funkcjonalności przestaną działać. Stąd cały problem.
Czyli ogólnie to static jest nie do ruszenia - bo tak
Mam zatem np klasę do pobierania jakiegoś tam linku która w metodzie get() ma np. $this->globals->get('pageUrl').'/'.$this->pobierzTamJakisLink(). Chciałem ją przetestować mockując $this->globals->get() tak, żeby zawsze zwracał pusty ciąg znaków.
@LowiczakPL
A:
<?php
namespace Example;
class A
{
public function doSomething()
{
return ('A->doSomething');
}
}
B:
<?php
namespace Example;
class B
{
public static function doSomething
() {
return ('B->doSomething');
}
}
public function testExample(){
$a = $this->getMockBuilder('Example\A')->setMethods(['doSomething'])->getMock();
$a->expects($this->any())->method('doSomething')->will($this->returnValue('AMock->doSomething'));
$b = $this->getMockBuilder('Example\B')->setMethods(['doSomething'])->getMock();
$b->expects($this->any())->method('doSomething')->will($this->returnValue('BMock->doSomething'));
}
Zwraca:
PHPUnit 5.4.4 by Sebastian Bergmann and contributors.
string(18) "AMock->doSomething"
Time: 65 ms, Memory: 4.00MB
WARNINGS!
Tests: 1, Assertions: 0, Warnings: 1.