使用Mock Supplier时getSomeValue返回null而非预期值的问题求助
解决Supplier返回Mock实例时方法调用返回null的问题
业务代码
class TestClass { private Supplier<SomeConfigClass> configSupplier; testMethod() { int value = configSupplier.get().getSomeValue(); // business logic using the value. } }
原测试代码
configSupplier = () -> mock(SomeConfigClass); // 已注入至TestClass TestClass ob = new TestClass(configSupplier); // 配置Mock when(configSupplier.get().getSomeValue()).thenReturn(1); // 调用方法 ob.testMethod(); // 验证调用 ...
问题原因
当前的Supplier实现() -> mock(SomeConfigClass)会每次调用get()时生成一个全新的SomeConfigClass Mock实例。配置Mock时,你是对第一次调用get()得到的实例设置了getSomeValue()返回1,但testMethod()里调用get()时拿到的是另一个全新的Mock实例,这个实例没有任何预设,所以getSomeValue()返回null。
修正后的测试代码
先创建一个固定的Mock实例,让Supplier始终返回这个实例:
// 先创建单一的Mock实例 SomeConfigClass configMock = mock(SomeConfigClass); // 让Supplier返回这个固定实例 configSupplier = () -> configMock; TestClass ob = new TestClass(configSupplier); // 直接对固定的Mock实例配置返回值 when(configMock.getSomeValue()).thenReturn(1); // 调用方法 ob.testMethod(); // 验证调用 ...
这样无论多少次调用configSupplier.get(),拿到的都是同一个Mock实例,预设的返回值自然会生效。
内容的提问来源于stack exchange,提问作者Amber Kulkarni
相关产品推荐
相关产品推荐

