Чтобы проверить method1
, вам просто нужно проверить его, как и любой другой метод. Объект, тестируемый в этом случае, не должен издеваться над классом Singleton.
Создание тестового объекта, т.е. вашего класса проверяемого (испытуемый), обычно в способе установки, то:
@Test
public void testMethod1() {
int testValue = 1;
int expectedResult = 2;
assertThat(testee.method1(testValue), equalTo(expectedResult));
}
В приведенном выше примере, я хотел бы использовать параметризованное тестирование с чем-то вроде JUnitParams, чтобы проверить границы, например, Integer MAX_VALUE и т.д.
@Test
@Parameters(method = "method1Params")
public void testMethod1(int testValue, int expectedResult) {
assertThat(testee.method1(testValue), equalTo(expectedResult));
}
@Ignore
private final Object[] method1Params() {
return new Object[] {
new Object { 1, 2 },
new Object { -2, -1 }
};
}
Mocking в основном используется, когда вы хотите, чтобы проверить SUT, в этом случае Singleton в отрыве от других компонентов (сотрудники), чтобы убедиться, что он ведет себя правильно. В этом случае это необязательно.
Когда вы могли бы использовать макет
public int method1(DependedOnComponent doc) {
int a = 1;
int ret = doc.method2(a);
return ret;
}
затем
@Test
public void testMethod1() {
DependedOnComponent mockDOC = mock(DependedOnComponent.class);
// When method2() is called you control the value returned
when(mockDOC.method2(1)).thenReturn(2);
assertThat(testee.method1(mockDOC), equalTo(2));
}
Почему вам нужно издеваться method2, чтобы проверить method1? – clD
Я новичок в тестировании устройств. Я думал, что для того, чтобы протестировать метод1, мне придется создать фиктивный метод2, чтобы не было вызова на фактический метод2. Если мой подход неверен, любезно скажите мне, как мне идти об модульном методе тестирования1? – Siddharth