У меня есть структура класса, подобная следующей
public abstract class AbstractStep {
private final Range RANGE;
AbstractStep(AbstractStepBuilder builder) {
RANGE = builder.range;
}
public abstract static class AbstractStepBuilder {
Range range;
public AbstractStepBuilder setRange(int start, end end) {
this.range = new Range(start, end);
return self();
}
abstract AbstractStepBuilder self();
}
public static class Range() {
private final int START;
private final int END;
private Range(int start, int end) {
if(start < 0 || end < 0 || start >= end)
throw new IllegalArgumentException();
START = start;
END = end;
}
}
}
Я хочу проверить setRange(int, int)
в AbstractStepBuilder
, чтобы увидеть, выбрасывается ли IllegalArgumentException
. Я использую TestNG и Mockito, и я попытался выполнить следующее с помощью this .
final class RangeTest {
AbstractStepBuilder builder;
@BeforeSuite
void setup() {
builder = Mockito.mock(AbstractStepBuilder.class);
Mockito.when(builder.self()).thenReturn(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
final void testCreatingRangeWithNegativeStart() {
builder.setRange(-1, 2);
}
}
Этот тест не пройден. Я также попытался заменить Mockito.mock(AbstractStepBuilder.class)
на Mockito.mock(AbstractStepBuilder.class, Mockito.CALLS_REAL_METHODS)
, как в верхнем ответе на этот вопрос.
Обратите внимание, что если я сделаю CodeRange
в качестве своего внешнего класса, этот тест пройден , поэтому я не верю, что это может быть сам тест.
Почему этот тест не пройден, и возможно ли его исправить, не используя вместо этого конкретный класс в тесте?