Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
1

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

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

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

Есть класс 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);
    }
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2016, 07:38
Ответы с готовыми решениями:

Народ, подскажите, правильно делаю или нет. Web + Java
GET-запрос, возвращающий в теле цикла Captcha-картинку, еще с сервера необходимо передавать...

Модульные тесты
Всем привет, я новичок, уехал учиться в Польшу на программирование, на магистратуру со знаниями...

Модульные тесты
Помогите пожалуйста составить модульные тесты. using System; namespace ConsoleApplication3 {...

Модульные тесты
Нужно сделать модульные тесты. Но в них я ни в зуб ногой. Задание такое: Напишите статический...

4
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
12.12.2016, 01:03 2
kuznets, также стоит проверять на кол-во вызовов методы и проверять на возникновение исключительных ситуаций
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
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 на него ругается, что не может найти такого по ИД, как его проверять?
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
19.12.2016, 08:03 4
возможно у вас как раз какая-то проблема в теле метода ну или вы что-то забыли "замокать". Собственно не видя картины целиком трудно предсказать)
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 79
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
не понимаю в чем дело, есть же такой метод.
0
22.12.2016, 22:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2016, 22:11
Помогаю со студенческими работами здесь

Создать модульные тесты VS
Привет. Мне нужна ваша помощь. Имеется код, для которого нужно создать два теста (примеры...

Создать модульные тесты...
при клике ПКМ в меню есть интересная строка... что это и как этим пользоваться? и если можно,...

Модульные, системные и регрессионные тесты
Читаю Программирование. Принципы и практика с использованием С++. Второе издание. Бьярне Страуструп...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru