Форум программистов, компьютерный форум CyberForum.ru

Java EE (J2EE)

Войти
Регистрация
Восстановить пароль
 
kuznets
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 57
#1

Правильно ли я делаю модульные тесты? - Java EE

09.12.2016, 07:38. Просмотров 339. Ответов 4
Метки нет (Все метки)

Привет, начал смотреть как делать модульные тесты, мой вопрос не о том как пофиксить что то, а просьба оценить написанное и дать рекомендации.

Есть класс MessageController ( ссылка на гитхаб )
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@RestController
public class MessageController {
 
    @Autowired
    private MessageService messageService;
 
    @RequestMapping(
            value = "/api/messages",
            method = RequestMethod.GET,
            produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Message> getAllMessages(){
        return messageService.findAll();
    }
 
    @RequestMapping(
            value = "/api/message/{id}",
            method = RequestMethod.GET,
            produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Message> getMessage(@PathVariable Long id){
        return new ResponseEntity<>(messageService.findOne(id), HttpStatus.OK);
    }
 
    @RequestMapping(
            value = "/api/message",
            method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> addMessage(@RequestBody Message message) {
        return new ResponseEntity<>(messageService.save(message), HttpStatus.CREATED);
    }
И сами тесты
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@RunWith(MockitoJUnitRunner.class)
public class MessageControllerTest {
 
    private final long ID = 1L;
    private final Date CREATED = new Date();
    private final Message  MESSAGE = new Message(ID, "text mesage", "author name", CREATED);
    private final List<Message> MESSAGE_LIST = new ArrayList<>();
 
    @Mock
    private MessageService messageService;
    @InjectMocks
    MessageController messageController;
 
    @Test
    public void getAllMessages() throws Exception {
        //prepare
        when(messageService.findAll()).thenReturn(ImmutableList.of());
        //testing
        List<Message> messages = messageController.getAllMessages();
        //validate
        verify(messageService).findAll();
    }
 
    @Test
    public void getMessage() throws Exception {
        //prepare
        when(messageService.findOne(ID)).thenReturn(MESSAGE);
        //testing
        ResponseEntity<Message> testMessage = messageController.getMessage(ID);
        //validate
        verify(messageService).findOne(ID);
    }
 
    @Test
    public void addMessage() throws Exception {
        //prepare
        when(messageService.save(MESSAGE)).thenReturn(MESSAGE);
        //testing
        ResponseEntity<Message> testMessage = (ResponseEntity<Message>) messageController.addMessage(MESSAGE);
        //validate
        verify(messageService).save(MESSAGE);
    }
 
    @Test
    public void addMessages() throws Exception {
        //prepare
        MESSAGE_LIST.add(MESSAGE);
        when(messageService.saveArray(MESSAGE_LIST)).thenReturn(MESSAGE_LIST);
        //testing
        ResponseEntity<Object> testMessages = (ResponseEntity<Object>) messageController.addMessages(MESSAGE_LIST);
        //validate
        verify(messageService).saveArray(MESSAGE_LIST);
    }
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2016, 07:38     Правильно ли я делаю модульные тесты?
Посмотрите здесь:

Java EE Как правильно установить GlassFish?
Как правильно отнести One to many Java EE
Java EE Как и где правильно открывать метод
Java EE Не правильно работает JNDI
Как правильно использовать пул соединения с БД Java EE
Как правильно отделить логику от вида Java EE
Spring. Тесты и Spring-security Java EE
Как правильно организовать поиск на сайте? Java EE
Как правильно обратиться к jsp странице? Java EE
Правильно создать ресурсы для тестов Java EE
Java EE Как правильно сделать запрос к серверу
Как правильно принять запрос Java EE

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
12.12.2016, 01:03     Правильно ли я делаю модульные тесты? #2
kuznets, также стоит проверять на кол-во вызовов методы и проверять на возникновение исключительных ситуаций
kuznets
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 57
19.12.2016, 00:06  [ТС]     Правильно ли я делаю модульные тесты? #3
Fene4ka_,
Спасибо за наводку, сделал тест на колличество вызовов

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Test
    public void InvocationCount() throws Exception {
        //prepare
        MESSAGE_LIST.add(MESSAGE);
 
        // call methods in mock
        messageController.getAllMessages();
        messageController.getAllMessages();
 
        messageController.getMessage(ID);
        messageController.getMessage(ID);
 
        messageController.addMessage(MESSAGE);
        messageController.addMessage(MESSAGE);
        messageController.addMessage(MESSAGE);
 
        messageController.addMessages(MESSAGE_LIST);
        messageController.addMessages(MESSAGE_LIST);
 
        messageController.updateMessage(ID, MESSAGE);
        messageController.updateMessage(ID, MESSAGE);
        messageController.updateMessage(ID, MESSAGE);
        
//        messageController.deleteMessage(ID);
 
        // verify method calls
        verify(messageService, times(2)).findAll();
        verify(messageService, times(2)).findOne(ID);
        verify(messageService, times(3)).save(MESSAGE);
        verify(messageService, times(2)).saveArray(MESSAGE_LIST);
        verify(messageService, times(3)).update(ID, MESSAGE);
//        verify(messageController, times(1)).deleteMessage(ID);
    }
Все работает кроме deleteMessage на него ругается, что не может найти такого по ИД, как его проверять?
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
19.12.2016, 08:03     Правильно ли я делаю модульные тесты? #4
возможно у вас как раз какая-то проблема в теле метода ну или вы что-то забыли "замокать". Собственно не видя картины целиком трудно предсказать)
kuznets
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 57
22.12.2016, 22:11  [ТС]     Правильно ли я делаю модульные тесты? #5
Есть у меня метод
Java
1
2
3
4
5
6
7
8
9
        @Override
    public boolean delete(Long id) {
        Message message = messageRepository.findOne(id);
        if (message == null) {
            throw  new DataNotFoundException("Data with id=" + id + " not found.");
        }
        messageRepository.delete(id);
        return true;
    }
и тест к нему
Java
1
2
3
4
5
6
7
        public void delete() throws Exception {
        //prepare
        when(messageService.delete(ID)).thenReturn(true);
        //testing
        boolean testMessage = messageService.delete(ID);
        //validate
        verify(messageService).delete(ID);
И получаю ошибку java.lang.Exception: No tests found matching Method delete
не понимаю в чем дело, есть же такой метод.
Yandex
Объявления
22.12.2016, 22:11     Правильно ли я делаю модульные тесты?
Ответ Создать тему
Опции темы

Текущее время: 13:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru