Если вы заинтересованы в том, чтобы не указывать дату для сохранения внешнего интерфейса, то хорошим способом для этого является использование «шва» для предоставления даты:
class MyClass {
public function toBeTested() {
$theDate = $this->getDate();
...
}
protected function getDate() {
return date();
}
}
В общем случаеэтот класс просто работает нормально.Затем в модульном тестировании вместо тестирования MyClass вы расширяете MyClass внутренним классом, который переопределяет функцию getDate ():
class MyTest extends phpunittestcase (sorry, writing this freeform, syntax is not exact!!) {
static $testDate;
public function testToBeTested() {
//set the date to be used
MyTest::testDate = '1/2/2000';
$classUnderTest = new MyClassWithDate();
$this->assertEquals('expected', $classUnderTest->toBeTested());
}
//just pass back the expected date
class MyClassWithDate extends MyClass {
protected function getDate() {
return MyTest::testDate;
}
}
}
В этом коде вы проверяете свое расширение реального класса,но ваше расширение переопределяет функцию шва (getDate ()) и возвращает дату, которую вы хотите использовать для этого конкретного теста.
Опять же, извините, если есть какие-то вопиющие синтаксические ошибки, это было написано от руки.