Я новичок в тестировании, и я не уверен, что делаю это правильно:
Я хочу не выполнять модульный тест для определенного класса, а для любого класса, который разрешается из моего контейнера ioc. В контейнере ioc я привязываю свои интерфейсы к конкретным классам, например:
Пример (я использую Laravel 5):
// in a service provider
public function register(){
$this->app->bind('FooInterface', function() {
return new SomeConcreteFoo;
});
}
Затем я хочу написать модульный тест для FooInterface
, а не SomeConcreteFoo
, который позже можно будет заменить другим классом.
Причина, по которой я хочу это сделать, заключается в том, что мне кажется, что соответствующее тестирование должно быть нацелено на то, что возвращает мой контейнер ioc, поскольку именно это я буду использовать в приложении. Мне также кажется, что тестирование должно проводиться на уровне интерфейса, поскольку именно здесь я определяю ожидания, которые остальная часть приложения будет иметь по отношению к моему классу.
Мне трудно найти какую-либо информацию о том, как это сделать, что говорит мне о том, что я могу думать об этом неправильно. Например, возможно, то, что я пытаюсь выполнить, больше похоже на интеграционный тест, а не на модульный тест.
Итак, первый вопрос: правильно ли я думаю о тестировании? если нет, есть ли у вас какие-либо предложения относительно передового опыта для альтернативного пути тестирования.
Второй вопрос: если я правильно думаю, как мне настроить phpspec для использования контейнера IOC Laravel, чтобы я мог протестировать все, что возвращает IOC.