我遇到继承和编写单元测试的问题。我不知道如何将mock作为一个字段注入,当我想要测试的类继承这个字段时。请注意,我不能存根任何东西,因为测试类是一个额外的测试包。我只想让myService.getSomething()
- 呼叫工作。
public class A{
@Autowired
private Service myService;
protected void doSomething(){
//
someValue = myService.getSomething();
}
继承方法的B类:
public class B extends A{
public void someMethod(){
doSomething();
}
}
这将是我的Testclass:
public class TestB{
@Mock
private Service myService;
@InjectMocks
private B classUnderTest = new B();
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testSomeMethod(){
SomeValue someValue = new SomeValue();
doReturn(someValue).when(myService).getSomething();
classUnderTest.doSomething();
}
}
感谢您的帮助。
答案 0 :(得分:3)
一种可能的方法是使用java反射来设置/更改运行时中的字段:
Field parentService = classUnderTest.getClass().getSuperclass().getDeclaredField("myService");
parentService.setAccessible(true);
parentService.set(classUnderTest, myService_mock);
正在寻找解决方案,这对我有用。