局部模拟类:在其他嘲讽类中使用嘲讽类

时间:2018-08-06 12:18:52

标签: java unit-testing spring-boot mockito

对于单元测试,我只想部分使用willCallRealMethod()模拟一个类。但是,似乎部分嘲笑的类中的@Autowired从属关系并没有被我定义的@MockBean覆盖。

我要测试的类看起来像这样:

@Service
public class TestableClass {

    @Autowired
    private TestableDependency testableDependency;

    public String testableMethod(final String param) {
        String result = this.someMethod(param);
        return testableDependency.anotherMethod(result);
    }

    public String someMethod(final String param) {
        return param + " :)";
    }
}

这是测试类的样子。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@Profile("test")
public class TestableClassTest {
    @MockBean
    private TestableClass testableClass;

    @MockBean
    private TestableDependency testableDependency;

    @Test
    public void testableMethodTest() {
        given(this.testableClass.someMethod("Hello").willReturn("Hello :)");
        given(this.testableDependency.anotherMethod("Hello :)").willReturn("Hello :) How are you?");
        given(this.testableClass.testableMethod("Hello").willCallRealMethod();

        String result = this.testableClass.testableMethod("Hello");

        assertThat(result)
        .isEqualTo("Hello :) How are you?");
    }
}

问题是testableDependency中的testableClass没有被testableDependency中定义的TestableClassTest覆盖。或者至少我是这样认为的,因为当我使用调试器时,我最终会遇到org.mockito.internal.invocation.RealMethod

如果我将testableClass中的TestableClassTest@MockBean更改为@Autowired,可能会起作用,但是我就无法再嘲笑someMethod。我怎样才能做到?

0 个答案:

没有答案