Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java EE (J2EE)

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

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

09.12.2016, 07:38. Просмотров 442. Ответов 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);
    }
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2016, 07:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Правильно ли я делаю модульные тесты? (Java EE):

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

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

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

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

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

Написать модульные тесты к программе - C++
Здравствуйте! Нужно написать модульный тест к этой программе. using namespace std; int main() { setlocale(LC_ALL,...

4
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
12.12.2016, 01:03 #2
kuznets, также стоит проверять на кол-во вызовов методы и проверять на возникновение исключительных ситуаций
0
kuznets
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 58
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
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
19.12.2016, 08:03 #4
возможно у вас как раз какая-то проблема в теле метода ну или вы что-то забыли "замокать". Собственно не видя картины целиком трудно предсказать)
0
kuznets
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 58
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2016, 22:11
Привет! Вот еще темы с ответами:

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

Модульные тесты (UNIT TEST) - C#
Всем привет. Есть небольшая проблемка. Подскажите пожалуйста ко чем сможет. Проблема следующая. У меня есть класс Vizualizator...

Правильно ли я реализовываю добавляемые пользователем поля в менеджер контактов. Код есть. Нужен совет, если не правильно делаю - C#
Как я хочу это дело осуществить. Я в класс Contact добавлю какое-то кол-во свойств (BirthDay, FullName, MobilePhoneNumber и т.д.), но я так...

Правильно ли я делаю?? - C++
Составьте программу, которая выводит на экран следующий результат (если x+y равно 13): Сумма х и у равна 13 В программе должен...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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