@miy

Юнит тесты в Yii2. Как сделать мок статических методов Active Record?

Например у меня есть модель.

class MyModel extends Model 
{
    public function foobar() 
    {
            $customer = Customer::find()->where('age>30')->all();
            // bussiness logic
            // .................. 
    }
}


Я хочу написать юнит тест для метода foobar. Мой метод foobar зависит от статического метода find класса Customer. Мой юнит тест не должен делать хит в базу. Есть ли какие нибудь варианты сделать мок этого метода Customer::find() ? Если это возможно - покажите пример.

Я пока склоняюсь к такому решению проблемы, которую подсмотрел здесь - https://sebastian-bergmann.de/archives/882-Testing...
class MyModel extends Model 
{
    public function doSomething(Customer $customer = NULL)
    {
        if ($customer === NULL) {
            $customer = Customer::find()->where('age>30')->all();
        }
 
        // ...
    }
}


Может есть ещё какие варианты?
  • Вопрос задан
  • 2602 просмотра
Пригласить эксперта
Ответы на вопрос 1
SamDark
@SamDark
Yii2 core team
Попробуйте вытащить бизнес-логику в отдельный класс, который работает с интерфейсом и берёт из него то, что вам нужно. В MyModel реализуйте этот интерфейс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы