Как я могу протестировать интерфейс без его предварительной реализации? - PullRequest
0 голосов
/ 19 сентября 2010

Я пытаюсь понять, как тестовые примеры могут повлиять на дизайн интерфейса.

Теперь, если у меня есть интерфейс с методом:

public interface UserService { User getNextUser(); }

и если UserServiceImpl является реализацией UserService, то, согласно моему пониманию фиктивных объектов, я должен только высмеивать зависимости UserServiceImpl, например, UserRepository, потому что только тогда я на самом деле тестирую поведение, т.е. нет.

Но тогда, если я должен написать UserServiceTest, не создавая UserServiceImpl, то единственный способ, который я вижу, - создать макет UserService, который кажется не совсем правильным.

Куда я пойду не так?

Ответы [ 3 ]

0 голосов
/ 20 сентября 2010

Ваши тестовые примеры должны управлять дизайном интерфейса, если client требуется для вызова getNextUser() объекта.Вы можете смоделировать объект для ваших тестов client.

. Если есть несколько клиентов, вызывающих этот метод, вы можете создать интерфейс на этом этапе, чтобы разные классы хоста могли обеспечивать различное поведение..

TDD (и, очевидно, BDD) управляет развитием поведения.Интерфейсы - хороший побочный эффект.

0 голосов
/ 23 ноября 2010

Моя команда сегодня думала о тестировании интерфейсов. Мы подняли два вопроса по теме, как и почему? (Мы используем MS Unit Test Framework в VS2010 с CCNET для автоматизации сборки и выполнения теста)

1. Как вы тестируете интерфейс?

В этой статье предлагается определить объект, реализующий интерфейс (я полагаю, явно). Вы создаете новый объект и используете оператор is, чтобы увидеть, реализует ли объект интерфейс. http://en.csharp -online.net / Test_for_an_interface_implementation

Другой подход заключается в явной реализации интерфейса в классе в тестовом проекте. Если тестовый проект не строится, то он сломан. Такой подход «все или ничего» не является хорошей идеей, поскольку он не позволяет запускать другие тесты.

2. Какова ценность в тестировании интерфейса?

В настоящее время я вижу только тесты, показывающие, что интерфейс отличается от ожидаемого, то есть он изменился. Это было бы важно, если вы отслеживаете, что дизайн не меняется. Если ваши разработчики имеют доступ к исходному коду как для приложений, так и для тестовых проектов, они всегда могут изменить тест для прохождения при сцеплении интерфейса.

0 голосов
/ 19 сентября 2010

Не могу сказать, что полностью понял, что вы пытаетесь понять своим вопросом, но суть в том, что вы не можете протестировать простой интерфейс. Если реализации нет, модульному тесту нечего тестировать.

Единственный способ, которым интерфейс может быть «неправильным», - это если он не выполняет свои требования к дизайну, и это может сказать только человек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...