java Mockito:在使用@InjectMocks时模拟被测方法调用的同一类的方法
我有一个我想测试的类,它有几个外部依赖项和几个内部方法。我想为MethodA
编写一个测试,但是没有方法a对MethodB
的内部调用来实际练习MethodB
。我想要mock/stubMethodB
并返回一些特定的内容。通常我会使用when/thenReturn
,但它的行为与我预期的不同——它实际上是在创建mock本身时跳入方法B
我的服务。java
@Service
public class MyService {
@Autowired
private ServiceA serviceA;
@Autowired
private ServiceB serviceB;
public SomeObject methodA() {
// some logic using serviceA.method and serviceB.method that creates "output"
SomeObject someObject = methodB(output);
return someObject;
}
public SomeObject methodB(SomeObject someObject) {
// deep mysteries done here to someObject
return someObject
}
}
我的服务测试。java
public class MyServiceTest {
@Mock
private ServiceA serviceA;
@Mock
private ServiceB serviceB;
@InjectMocks
private MyService myService;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void methodATest() {
when(serviceA.method()).thenReturn(stuff);
when(serviceB.method()).thenReturn(otherStuff);
// here is what I would like to do
when(myService.methodB()).thenReturn(mockedSomeObject); //<- doesn't work
assertThat(myService.methodA().getSomeObjectProperty())
.isEqualTo("property");
}
}
我已经研究过用Mockito.mock(MyService.class)
手动模拟MyService
类的解决方案,但是(正如上面的例子明显是人为的)我的实际类有很多外部依赖项,我更喜欢一个解决方案,它仍然允许我对@Autowired
依赖项使用@Mock
模拟服务,对测试中的类使用@InitMocks
,除非这根本不可能
我试过:
Mockito.doReturn(mockedSomeObject).when(myService.methodB(any(SomeObject.class));
但在为该方法创建模拟时,这也会进入MethodB,这不应该发生
提前感谢您的帮助
共 (0) 个答案