Почему Mockito не внедряет макет общего типа? ⇐ JAVA
-
Anonymous
Почему Mockito не внедряет макет общего типа?
Я выполняю общее обновление нашей кодовой базы (с Java 11 до 17, обновление Spring, обновление Hibernate и т. д.), а также немного тестового кода при переходе с Mockito 1.10 на 5.8.0, и обнаружил, что некоторые из наших тесты больше не работают так, как раньше.
Я попробовал несколько разных версий Mockito в диапазоне 5.x, а также экспериментировал с переходом между @Mock и @MockBean для моего имитируемого класса. Я свел проблему к этим модульным тестам, которые я добавил в GenericTypeMockTest в репозитории Mockito, который я удалил локально:
@Nested общественный класс ClassWithGenericFieldsTest { общественный класс UnderTestWithGenericField { T toBeInjected; } общественный класс ConcreteClass {} @Mock ConcreteClass введенныйMock; @InjectMocks UnderTestWithGenericField underTestWithGenericField = new UnderTestWithGenericField(); @Тест недействительный testWithGenericFields() { AssertNotNull (injectedMock); // проверяем, можем ли мы соответствовать параметрам типа тестируемого класса AssertEquals(injectedMock, underTestWithGenericField.toBeInjected); } } @Nested общественный класс SuperClassWithGenericFieldsTest { общественный класс SuperWithGenericField { List listToBeInjected; Т экземплярToBeInjected; } публичный класс ChildClass расширяет SuperWithGenericField {} общественный класс ConcreteClass {} @Mock List InjectList; @Mock ConcreteClass InjectInstance; @InjectMocks ChildClass underTestWithGenericField = новый ChildClass(); @Тест недействительный testWithGenericFields() { AssertNotNull (injectedList); AssertNotNull (injectedInstance); // проверяем, можем ли мы соответствовать параметрам типа тестируемого класса AssertEquals(injectedList, underTestWithGenericField.listToBeInjected); AssertEquals(injectedInstance, underTestWithGenericField.instanceToBeInjected); } } В первом тесте изменение поля toBeInjected и макет injectedMock на List исправляет тест, но это не отражает код, который я поддерживаю. Как показано, во второй версии теста ни то, ни другое не работает.
Я выполняю общее обновление нашей кодовой базы (с Java 11 до 17, обновление Spring, обновление Hibernate и т. д.), а также немного тестового кода при переходе с Mockito 1.10 на 5.8.0, и обнаружил, что некоторые из наших тесты больше не работают так, как раньше.
Я попробовал несколько разных версий Mockito в диапазоне 5.x, а также экспериментировал с переходом между @Mock и @MockBean для моего имитируемого класса. Я свел проблему к этим модульным тестам, которые я добавил в GenericTypeMockTest в репозитории Mockito, который я удалил локально:
@Nested общественный класс ClassWithGenericFieldsTest { общественный класс UnderTestWithGenericField { T toBeInjected; } общественный класс ConcreteClass {} @Mock ConcreteClass введенныйMock; @InjectMocks UnderTestWithGenericField underTestWithGenericField = new UnderTestWithGenericField(); @Тест недействительный testWithGenericFields() { AssertNotNull (injectedMock); // проверяем, можем ли мы соответствовать параметрам типа тестируемого класса AssertEquals(injectedMock, underTestWithGenericField.toBeInjected); } } @Nested общественный класс SuperClassWithGenericFieldsTest { общественный класс SuperWithGenericField { List listToBeInjected; Т экземплярToBeInjected; } публичный класс ChildClass расширяет SuperWithGenericField {} общественный класс ConcreteClass {} @Mock List InjectList; @Mock ConcreteClass InjectInstance; @InjectMocks ChildClass underTestWithGenericField = новый ChildClass(); @Тест недействительный testWithGenericFields() { AssertNotNull (injectedList); AssertNotNull (injectedInstance); // проверяем, можем ли мы соответствовать параметрам типа тестируемого класса AssertEquals(injectedList, underTestWithGenericField.listToBeInjected); AssertEquals(injectedInstance, underTestWithGenericField.instanceToBeInjected); } } В первом тесте изменение поля toBeInjected и макет injectedMock на List исправляет тест, но это не отражает код, который я поддерживаю. Как показано, во второй версии теста ни то, ни другое не работает.
Мобильная версия