2015-12-06 3 views
0

Я немного смущен тем, как правильно писать модульные тесты для моего приложения. На самом деле, я хочу знать, нужно ли мне переписать существующий метод и изменить его для junit или просто вызвать мой существующий метод и использовать assert. До сих пор я использую второй вариант, но я столкнулся с проблемой. Например, внутри метода контроллера я получаю текущего пользователя и передаю его некоторым службам. Если я вызову этот метод через JUnit, он будет показывать пустое исключение, потому что пользователь не зарегистрирован. Итак, 1) Нужно ли мне переписывать эти методы для целей тестирования? 2) Правильно ли вызывать существующие методы и использовать утверждение в любом случае? БлагодаряКак правильно писать тесты JUnit?

@RequestMapping(value="/like", method=RequestMethod.GET) 
public String msgLike(@RequestParam("msgId") long messageId, @RequestParam("like") boolean like){ 

    User user = new User(); 
    user = this.userService.getUserByName(this.userService.getLoggedInUsername()); //NULL EXCEPTION HERE WHEN TESTING 

    if(!messageService.checkIfLiked(user, messageId)){ 
     if(like){ 
      messageService.insertLike(messageId); 
      messageService.insertMessageUserLike(user, messageId); 
     } 
     if(!like){ 
      messageService.insertDislike(messageId); 
      messageService.insertMessageUserLike(user, messageId); 
     } 
    } 

    return "redirect:/home"; 
} 
+0

Возможно, вы захотите предоставить более подробную информацию о своей проблеме. Можете ли вы показать пример кода того, что вы пытаетесь проверить, и явно указать, где проблема? –

+0

@Fido Я опубликовал метод, который я пытался проверить. – wr21

ответ

1

На самом деле я хочу знать, если я должен переписать существовал метод и изменить его для JUnit или просто позвонить мой существовавший метод и использовать Assert.

Просто позвоните своему методу выхода. На самом деле junit написан перед написанием логики для вызова метода.

Пример:

Если вы хотите, чтобы проверить метод Int квадрат (целое NUM), в котором найти квадрат данного NUM,
Так пишут Junits как это,

@Test 
    squareTest() { 
    int square = objectName.square(3); 
    assertThat(square , is(equalTo(9))); 
    } 

И когда кодирование осуществляется, как это,

int square(int a) { 
result=a*a; 
return result; 
} 

Запустите свой юнит.

Для вашего второго вопроса,


Вы должны читать Mocking.

0

В вашем случае, если вы пытаетесь проверить контроллер отдыха, который немного отличается при тестировании обычных методов. Например, следующий метод:

public MyClass{ 
    public static int sum(int a, int b){ 
     return a + b; 
    } 
} 

Может просто быть проверено:

@Test 
public void testSum(){ 
    assertEquals(3, MyClass.sum(1, 2)); 
} 

Но в вашем случае требуется API контроллера, чтобы использовать должным образом. т. е. вам нужен зарегистрированный пользователь. Для этого вам нужно будет протестировать свои контроллеры, обратившись к ним, как пользователи. This дает некоторые пояснения по этому процессу, а ответ this дает еще более подробную информацию.

По сути то, что вы ищете блок контроллеров тестирования остальные.

0

Что вам нужно сделать, это в тестировании, поставить поддельную UserService что даст функции пользователя с соответствующими свойствами для этого теста.

Перед испытанием необходимо установить this.userService вашему FakeUserService.

Трудно быть более конкретным, не видя больше кода.

Это хороший вопрос, потому что это обычная проблема при обучении написанию модульных тестов. Решение этой проблемы поможет вам лучше писать код.

Смежные вопросы