Как вернуть реальный объект из макетной конструкции с помощью MockitoJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как вернуть реальный объект из макетной конструкции с помощью Mockito

Сообщение Anonymous »

Я хочу вернуть реальный объект из имитируемой конструкции с помощью Mockito 5.9, но ничего из того, что я пробовал, не работает.
Сначала я попробовал это:

Код: Выделить всё

    private static class Foo {
private final int field;

Foo(int field) {
this.field = field;
}

int getField() {
return field;
}
}

@Test
public void test() {
Foo spy = new Foo(5);
try (var ignored = mockConstruction(Foo.class, withSettings()
.spiedInstance(spy))) {
Foo foo = new Foo(0);
int field = foo.getField();
Assert.assertEquals(5, field);
}
}
Но тест завершается неудачей, когда я его запускаю, говоря:

Код: Выделить всё

java.lang.AssertionError:
Expected :5
Actual   :0
Это противоположно тому, что мне нужно.
Я также попробовал это для тестового кода:

Код: Выделить всё

    @Test
public void test() {
try (var ignored = mockConstruction(Foo.class, withSettings()
.useConstructor(5)
.defaultAnswer(CALLS_REAL_METHODS))) {
Foo foo = new Foo(0);
int field = foo.getField();
Assert.assertEquals(5, field);
}
}
Но он терпит неудачу с той же проблемой. Я могу понять, почему этот конкретный вариант может не работать, потому что вызов конструктора может вызвать заглушенное поведение, что не имеет смысла.
Третье, что я попробовал, было вот это, но та же проблема:

Код: Выделить всё

    @Test
public void test() {
Foo spy = mock(Foo.class, withSettings()
.useConstructor(5)
.defaultAnswer(CALLS_REAL_METHODS));
try (var ignored = mockConstruction(Foo.class, withSettings()
.spiedInstance(spy))) {
Foo foo = new Foo(0);
int field = foo.getField();
Assert.assertEquals(5, field);
}
}
Похоже, что вызов методаockConstruction() игнорирует настройки, которые я настраиваю, что похоже на ошибку. Есть идеи, является ли это ошибкой или есть другой способ сделать это?
В реальном коде, который я тестирую, определенно есть проблемы с дизайном, но я все равно проверяю, есть ли в Mockito ошибка.

Подробнее здесь: https://stackoverflow.com/questions/782 ... th-mockito
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»