对于单元测试,我只想部分使用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
。我怎样才能做到?