Unit тесты для Service-слоя

229
24 мая 2018, 11:40

Здравствуйте не так давно задался вопросом на тему того как тестировать сервис-слой в приложениях. Поискав немного информации в интернете нашел от одних, что нужно заводить тестовую БД и для нее писать UNIT - тесты. Другие в совю очередь сказали, что все делается на основной БД, но это мне не совсем понятно ведь должно же быть один тест = одному какому-тодействию( к примеру, если добавить пользователя в БД, его же надо будет потом удалить в этом же тесте, так как БД основная). К примеру взять вот мой код сервиса на Java(Spring Data), в качестве бибилиотеки для тестирвоания использую JUnit4.

@Service
public class UsersServiceImpl implements UsersService {
    @Autowired
    private UserRepository userRepository;
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
    public boolean isExistUser(String login, String password) {
        User user = userRepository.findByLoginAndPassword(login, password);
        return user != null;
    }
    public boolean removeUserByLogin(String login) {
        try {
            userRepository.deleteByLogin(login);
            return true;
        } catch (DataAccessException e) {
            return false;
        }
    }

    public boolean addNewUser(String name, String login, String password) {
        try {
            User user = new User(name, login, password);
            userRepository.saveAndFlush(user);
            return true;
        } catch (DataAccessException e) {
            return false;
        }
    }
}

Хотелось бы, чтобы кто-нибудь либо показал пример как это правильно делается, либо очень подробно рассказал об этом процессе. Заранее спасибо...

Answer 1

Конкретно в вашем случае, тестирование сервис слоя - это тоже самое, что тестирование слоя доступа к данным. Это значит, что вам необходимо настроить тестовую конфигурацию Hibernate, используя при этом IN_MEM базу данных, например HSQLDB. В ней HIbernate (в большинстве случаев) сам воссоздаст структуру базы данных, использую Entity, или (для сложных сценариев) можно воспользоваться патчем для инициализации базы данных, который тоже указывается в настройках Hibernate.

READ ALSO
Одноразовое объявление переменной

Одноразовое объявление переменной

В общем, есть код в цикле:

158
Библиотеки криптопро

Библиотеки криптопро

с криптопро я раньше не работалНо сейчас в нашей компании возникла задача реанимировать сервис для подписи файлов

165
Почему для выбора ряда в таблице необходимо двойной клик?

Почему для выбора ряда в таблице необходимо двойной клик?

Всем приветУ меня есть страничка на которой находиться выпадающий список с именами кастомеров

215
Перевод экранных координат в мировые

Перевод экранных координат в мировые

При переводе координат у меня почему то не учитывается матрица View:

160