Строгий @MockBean в тесте загрузки SpringJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Строгий @MockBean в тесте загрузки Spring

Сообщение Anonymous »

Я разрабатываю приложение Spring Boot. Для моих обычных модульных тестов класса обслуживания я могу расширить свой тестовый класс с помощью MockitoExtension, и макеты будут строгими, это то, что я хочу.

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

interface MyDependency {
Integer execute(String param);
}

class MyService {
@Autowired MyDependency myDependency;

Integer execute(String param) {
return myDependency.execute(param);
}
}

@ExtendWith(MockitoExtension.class)
class MyServiceTest {
@Mock
MyDependency myDependency;

@InjectMocks
MyService myService;

@Test
void execute() {
given(myDependency.execute("arg0")).willReturn(4);

myService.execute("arg1"); //will throw exception
}
}
В этом случае исключение генерируется со следующим сообщением (отредактировано):

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

org.mockito.exceptions.misusing.PotentialStubbingProblem:
Strict stubbing argument mismatch. Please check:
- this invocation of 'execute' method:
myDependency.execute(arg1);
- has following stubbing(s) with different arguments:
1. myDependency.execute(arg0);
Кроме того, если бы заглушка никогда не использовалась, было бы следующее (отредактировано):

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

org.mockito.exceptions.misusing.UnnecessaryStubbingException:
Unnecessary stubbings detected.
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
1. -> at MyServiceTest.execute()
Однако, когда я использую @MockBean в интеграционном тесте, никакого строгого поведения не наблюдается. Вместо этого метод-заглушка возвращает значение null, поскольку заглушка «терпит неудачу» молча. Это поведение, которого я не хочу. Гораздо лучше сразу же потерпеть неудачу при использовании неожиданных аргументов.

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

@SpringBootTest
class MyServiceTest {
@MockBean
MyDependency myDependency;

@Autowired
MyService myService;

@Test
void execute() {
given(myDependency.execute("arg0")).willReturn(4);

myService.execute("arg1"); //will return null
}
}
Есть ли какой-нибудь обходной путь?

Подробнее здесь: https://stackoverflow.com/questions/697 ... -boot-test
Ответить

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

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

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

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

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