我有一个类,我在构造函数中使用惰性初始化自动连接它。但是我无法使用@Mock模拟它。它在我的测试类中抛出空指针异常。
@Transactional
@Repository
public class A{
private B b;
@Autowired
public A(@Lazy B b {
this.b= b;
}
}
Iam unable to mock the bean B.My test class is as follows.
@RunWith(MockitoJUnitRunner.class)
public class ATest{
@Rule
public ExpectedException thrown = ExpectedException.none();
@InjectMocks
A a;
@Mock
B b;
Mockito.when(b.methodCall()).thenReturn("test");
}
字符串
上面的代码返回空指针异常,因为我无法模拟类B。请让我知道如何模拟这个。
3条答案
按热度按时间brjng4g31#
我很确定这不是最好的解决方案,但我使用反射解决了它
字符串
pbpqsu0x2#
您正在使用构造函数注入,
@Autowired
和@Lazy
注解应该位于方法上方。请尝试:A级:
字符串
B类:
型
测试类别:
型
xxls0lw83#
@InjectMocks注解代码似乎有一个bug。构建和运行应用程序对我来说很好,但是如果Autowired字段而不是构造函数参数,@InjectMocks无法注入Lazy。
字符串
s2为null
我的解决方案:
但是,如果我将Lazy服务注入到构造函数中,它就可以正常工作。
型
^^ s2按预期填充