Mockito模拟UriComponentsBuilder遇[null]无效URL问题求助
解决UriComponentsBuilder.fromHttpUrl模拟问题
你的代码报错原因是:mock的UriComponentsBuilder实例调用fromHttpUrl方法时,默认返回null,后续调用build()自然会抛出"[null] not a valid http url"错误。而且UriComponentsBuilder.fromHttpUrl是静态工厂方法,直接mock实例无法正确模拟静态方法的调用逻辑。
正确模拟方式(针对静态方法调用)
如果业务代码中直接调用UriComponentsBuilder.fromHttpUrl(oauthURL),需要用Mockito的mockStatic来模拟整个类的静态方法:
// 1. 模拟UriComponentsBuilder静态类 try (MockedStatic<UriComponentsBuilder> mockedUriBuilder = Mockito.mockStatic(UriComponentsBuilder.class)) { // 2. 创建需要的mock实例 UriComponentsBuilder mockBuilder = Mockito.mock(UriComponentsBuilder.class); UriComponents mockComponents = Mockito.mock(UriComponents.class); // 3. 配置静态方法mock:当调用fromHttpUrl传入指定URL时,返回mockBuilder mockedUriBuilder.when(() -> UriComponentsBuilder.fromHttpUrl("https://mock.com")) .thenReturn(mockBuilder); // 4. 配置mockBuilder的build方法返回mockComponents Mockito.when(mockBuilder.build()).thenReturn(mockComponents); // 执行你的业务逻辑测试... }
注意事项
- 必须使用
try-with-resources包裹mockStatic,确保静态mock在测试结束后被清理,避免影响其他测试用例。 - 如果你的业务代码是通过依赖注入获取UriComponentsBuilder实例而非直接调用静态方法,那需要调整模拟逻辑:确保注入的mock实例的链式调用都被正确配置(比如模拟
uriComponentsBuilder.path(...)等方法时,要返回自身实例)。
内容的提问来源于stack exchange,提问作者swapnil
相关产品推荐
相关产品推荐

