Mock和Inject继承了字段

时间:2015-12-15 12:40:41

标签: java unit-testing inheritance junit mockito

我遇到继承和编写单元测试的问题。我不知道如何将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();
        }
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

一种可能的方法是使用java反射来设置/更改运行时中的字段:

    Field parentService = classUnderTest.getClass().getSuperclass().getDeclaredField("myService");
    parentService.setAccessible(true);
    parentService.set(classUnderTest, myService_mock);

正在寻找解决方案,这对我有用。

参考:https://stackoverflow.com/a/31832491/2489388