Вы столкнулись с классической проблемой модульного тестирования. Имя класса, которое вы используете для статического вызова, является частью глобального пространства имен. Это означает, что нет смысла вставлять макет. Это не магия, которую вы можете сделать здесь, чтобы решить эту проблему, вам придется внести некоторые изменения в код.
Есть много способов решить это, и есть много против и против каждого из них. Я дам вам простое хакерское решение. Если вы хотите что-то другое, дайте мне знать, и я напишу пример.
Я также предполагаю, что вы не можете изменить ORM, основываясь на статических классах.
Вот хакерский подход, который очень плохой способ делать вещи, так что вы знаете. В вашем классе должна быть переменная, которая является именем класса ORM, который вам нужно использовать. Это код PHP 5.3.
Вот так:
<?php
class Bar {
public static $ormName = 'FooModel';
public static function doStuff()
{
$className = self::$ormName;
echo $className::find(1), "\n";
}
}
Затем в вашем тесте PHPUnit создайте макет. Получите его имя класса, установите это имя класса для вашего испытуемого. Теперь ваш испытуемый будет называть вашу ложь.
Есть много способов решить эту проблему, но есть некоторые, как вам нужен способ не использовать имя класса напрямую.