Есть несколько вещей, которые вы можете сделать, чтобы избежать насмешек над всей вселенной для вашего теста.
В этом конкретном случае c создания CassandraSessionFactory
уже может быть достаточно для инъекции / макета все проще.
Я бы порекомендовал, однако, разделить в Интерфейс обязанности хранилища и сделать реализацию Cassandra c.
Например, допустим, у вас есть Person
коллекция / стол. И вы хотите, чтобы ваша программа могла их получать. Затем вы создадите PersonRepository
интерфейс с fetchBySomething(): Person
методами. Позже вы сможете создать конкретную реализацию под названием CassandraPersonRepository
, которая реализует это, используя правильное расширение.
С этим выше вы можете модульный тест всего, что требует PersonRepository
, с помощью дразнить только его интерфейс. И сделайте контрактные тесты только для соединения CassandraPersonRepository
.
Проверьте это сообщение: https://thephp.website/en/issue/clean-tests-with-php-and-phpunit/ Есть два раздела, которые будут полезны для вашего случая: «У тестов не должно быть операций ввода-вывода» и «Всегда вводить зависимости». Они показывают быстрый способ достичь того, что я только что упомянул.
Бонусный совет : используйте Prophecy вместо Mock phpunit. Это намного проще и даже быстрее.
Надеюсь, этот ответ был полезен:)
Ура!