Mockito проходит, но охват кода все еще низок - PullRequest
0 голосов
/ 11 сентября 2010
package com.fitaxis.test;

import java.sql.SQLException;

import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import static org.mockito.Mockito.*;

import com.fitaxis.leaderboard.LeaderBoard;

public class LeaderBoardTests {


 @Test 
 public void TestThatDataIsSavedToTheDatabase()
 {
  LeaderBoard leaderBoard = mock(LeaderBoard.class);
  //doNothing().doThrow(new RuntimeException()).when(leaderBoard).saveData();

  when(leaderBoard.saveData()).thenReturn(true);

  boolean res = leaderBoard.saveData();

  verify(leaderBoard).saveData();

  Assert.assertTrue(res);
 }

}

Я использовал mockito для макетирования класса, но когда я использую покрытие кода, он не обнаруживает, что метод был вызван. Я делаю что-то неправильно? Пожалуйста, помогите!

Ответы [ 3 ]

10 голосов
/ 11 сентября 2010

Похоже, вы издеваетесь над единственным вызовом, который вы делаете в рабочем коде.

Другими словами, ваш тест говорит:

  • Когда я звоню saveData(), имитирую результат, чтобы вернуть true
  • Теперь позвоните saveData() - да, результат был верным!

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

Смысл насмешки заключается в том, чтобы смоделировать зависимости от вашего производственного класса или (иногда, хотя я предпочитаю этого не делать), смоделировать некоторые методы вашего производственного класса, которые будет вызывать код, который вы фактически тестируете.

Вы должны , вероятно, высмеивать зависимости Leaderboard, а не Leaderboard. Если вы должны сделать макет saveData(), вам следует проверить методы, которые вызывают saveData() ..., чтобы убедиться, что они сохраняют правильные данные, что они действуют правильно, когда saveData() возвращает ложь и т. д.

4 голосов
/ 11 сентября 2010

если я правильно понимаю ваш вопрос:

потому что вы издеваетесь над LeaderBoard. это означает, что вы не тестируете его.

если вы хотите проверить LeaderBoard, вам следует протестировать реальный класс, а не фиктивный.

Допустим, вы хотите протестировать класс A, но этот класс зависит от B, и создать экземпляр B довольно сложно в среде тестирования (по любой причине). в таких случаях вы можете издеваться над Б.

но вот ваш случай, вы издеваетесь над самим классом А. это означает, что вы ничего не тестируете.

0 голосов
/ 05 января 2019

добавить класс бегуна как MockitoJUnitRunner, пожалуйста, используйте приведенный ниже пример кода

import org.mockito.junit.MockitoJUnitRunner

@RunWith(MockitoJUnitRunner.class)
public class MockitTesterClass{
    @Mock
    private TestService testServiceMock;
}

теперь покрытие кода будет увеличиваться

...