Я думаю, вы хотите взглянуть на метод, который вы пытаетесь высмеять. Вместо содержания метода. Позвольте мне объяснить на примере. Вот простой класс, который я хочу проверить:
package com.diffblue.javademo;
public class ClassToTest {
private boolean beenChecked = false;
private SomeDAO someDAO = new SomeDAO();
public void checkActive(int id) {
if (someDAO.isActive(id)) {
beenChecked = true;
}
}
public boolean getBeenChecked() {
return beenChecked;
}
}
Он звонит SomeDAO, над которым я хочу издеваться:
package com.diffblue.javademo;
public class SomeDAO {
public boolean isActive(int id) {
if (id < 5) {
return true;
}
return false;
}
}
Когда я создаю контрольный пример, я думаю о пути через checkActive
, который я хочу проверить, и затем выбираю ответ из isActive
, который будет использовать этот путь. Например:
package com.diffblue.javademo;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Matchers;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import static org.mockito.Mockito.when;
public class ClassToTestTest {
/**
* Test the positive side of the if statement in checkActive
*/
@PrepareForTest({SomeDAO.class})
@Test
public void positiveTest() throws Exception {
// Arrange
ClassToTest objectUnderTest = new ClassToTest();
SomeDAO someDAO = PowerMockito.mock(SomeDAO.class);
when(someDAO.isActive(Matchers.anyInt())).thenReturn(true);
int activeId = 3;
// Act
objectUnderTest.checkActive(activeId);
// Assert
Assert.assertTrue(objectUnderTest.getBeenChecked());
}
}
В этом случае я проверил путь, где выражение if (строка 6 SomeDAO) является истинным. Так что я не издевался над оператором if, но я принудительно определил путь к коду, тщательно выбирая возвращаемые значения, которые дает Mockito.