Странная проблема с выполнением тестов с junit - PullRequest
2 голосов
/ 14 апреля 2011

Я пишу небольшую библиотеку для фильмов для себя. Это частично для изучения TDD. Теперь у меня есть проблема, которую я не могу решить.

Код здесь https://github.com/hasanen/MovieLibrary/blob/master/movielibrary-core/src/test/java/net/pieceofcode/movielibrary/service/MovieLibraryServiceITC.java

Проблема в том, что когда я запускаю весь класс (щелкните правой кнопкой мыши над именем класса в Eclipse), второй тест завершается неудачно, поскольку удаление не удается. Но если щелкнуть правой кнопкой мыши метод (getMovieGenres_getAllGenresAndRemoveOne_returnsTwoGenreAndIdsAreDifferent) и выбрать «Выполнить как тест Junit», он работает.

Мне не обязательно исправление, но, по крайней мере, несколько советов о том, как узнать, почему junit действует так.

Ответы [ 3 ]

3 голосов
/ 14 апреля 2011

Исходя из того, как вы объясните проблему, проблема, кажется, в классе setUp.Класс setUp запускается перед каждым вызовом тестового примера.Это общая последовательность.

1 - Добавить три фильма.

2 - Проверить, существует ли три фильма.

3 - Добавить три фильма

4- удалить элемент фильма №1.

Поскольку последовательность 1-4 работает, проблема заключается в последовательности 3. Либо последовательность 3 поглощает какое-то исключение, либо мутирует базовый объект.(может быть изменена последовательность.) Не зная, как addMovie изменяет базовый объект, трудно сказать.

0 голосов
/ 14 апреля 2011

ИМХО, проблема в том, что ваш тест не является реальным модульным тестом, а интеграционным.Поэтому, тестируя свой сервис, вы тестируете все слои, которые он использует.Я рекомендую использовать mock для зависимостей нижних уровней (EasyMock или что-то в этом роде) и использовать интеграционные тесты только для вашего уровня репозитория.Таким образом, вы можете избежать влияния персистентного уровня при тестировании сервисного уровня.

0 голосов
/ 14 апреля 2011

Что-то вне вашего тестового класса (вероятно, суперкласс) создает movieLibraryService, и оно воссоздается не так часто, как это необходимо для независимого тестирования.

Если вы добавите строку

movieLibraryService = new MovieLibraryService();

в верхней части вашего testSetUp() метода, эта служба будет корректно сброшена перед запуском каждого метода тестирования, и они, вероятно, будут работать должным образом.

На самом деле, я подозреваю вас 'Получается ошибка в утверждении о размере, так как размер становится 6 вместо 3.

В качестве альтернативы, вы можете добавить метод разрыва (аннотированный @After), который удаляет содержимое библиотеки фильмов, так чточто он всегда начинается пустым.

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