我最近开始使用Mockito 3 + Junit 5 + Spring 5,并且正在编写一些示例测试,以了解Mockito的工作方式。我对内部电话有疑问。因此,我有一个弹簧组件A
,其中注入了一些DAO组件someObjectDAO
。 A
类:
@Component("aClass")
public class A {
@Autowired
private ObjectDAO someObjectDAO;
public Long countRecords() {
ObjectSearchCriteria search = new ObjectSearchCriteria();
return someObjectDAO.count(search);
}
}
我想测试A
的{{1}}方法。我已经像这样嘲笑并注入了countRecords
:
someObjectDAO
但是这种方式是不正确的,实际上是引发了@ExtendWith(MockitoExtension.class)
@ContextConfiguration("contextConfFileSomewhere")
public class ATest {
@Mock
ObjectDAO someObjectDAOMock;
@InjectMocks
A aComponent;
@Test
void testCount() {
ObjectSearchCriteria search = Mockito.mock(ObjectSearchCriteria.class);
Mockito.when(someObjectDAOMock.count(search)).thenReturn(1L);
Assertion.assertEquals(1L,aComponent.countRecords());
}
}
。
PotentialStubbingProblem
如果我正确理解异常,则表明我正在传递的对象与测试代码中使用的实际对象不同,对吗?
那么,我该如何模拟使用局部变量作为参数的内部方法?