我刚刚升级了我们的AEM代码库,以使用JUnit 5,但我们在模拟LanguageManager的特定方法的一些测试中遇到了一些问题。
@MockitoSettings(strictness = Strictness.LENIENT)
@ExtendWith({AemContextExtension.class, MockitoExtension.class})
public class SomeComponentTest {
@Mock
private LanguageManager languageManager;
@BeforeEach
public void setUp() throws Exception {
...
context.registerService(LanguageManager.class, languageManager);
...
}
@Test
public void someTest() {
...
Page mockPage = mock(Page.class);
given(languageManager.getLanguageRoot(any())).willReturn(mockPage);
...
}
}即使我注册了LanguageManager模拟,它似乎仍然获得了WCM提供的模拟,它是在这里初始化的:https://github.com/wcm-io/wcm-io-testing/blob/develop/aem-mock/core/src/main/java/io/wcm/testing/mock/aem/context/AemContextImpl.java -> registerInjectActivateService(https://github.com/wcm-io/wcm-io-testing/blob/develop/aem-mock/core/src/main/java/io/wcm/testing/mock/aem/context/AemContextImpl.java MockLanguageManager());
我在这里做错了什么吗,或者只是没有办法监视/模拟LanguageManager的方法。请注意,在过去,这在使用以下命令时有效:
@RunWith(MockitoJUnitRunner.class)发布于 2021-03-25 21:59:36
context.registerService(LanguageManager.class, myCustomLanguageManager,
Constants.SERVICE_RANKING, 100);或
this.mockLanguageManager = context.registerService(LanguageManager.class,
spy((MockLanguageManager)context.getService(LanguageManager.class)),
Constants.SERVICE_RANKING, Integer.MAX_VALUE);
// Now you can leverage the mocked language manager that is provided, while
you can still override some of the methods if desired, due to it being a spyhttps://stackoverflow.com/questions/66693264
复制相似问题