使用Mockito 注释(MockitoJUnitRunner.class
,@InjectMocks
和@Mock
):
@RunWith(MockitoJUnitRunner.class)
public class TagRepositoryTest {
@InjectMocks
private TagRepository repository;
@Mock
private SetupDetails setupDetails;
....
}
我在构造函数中使用注入的依赖项测试目标类:
public class TagRepository {
private final Collection<Tag> tags;
@Autowired
public TagRepository(SetupDetails setupDetails) {
this.tags = Arrays.asList(
new Tag("name", setupDetails.getSourceId()),
...
);
...
}
我目前存根 @Setup
或@Test
内when()
内的方法调用:
when(setupDetails.getSourceId()).thenReturn("1");
无效符合预期。 Mockito似乎只在调用@InjectMocks TagRepository
构造函数后存根方法调用,导致null
返回而不是"1"
。
有没有办法在调用构造函数之前准备好存根(使用Mockito注释)?
答案 0 :(得分:0)
我能够解决此问题的唯一方法是尝试控制Mockito设置此场景放弃Mockito注释的顺序:
public void setUp() {
setupDetails = mock(SetupDetails.class);
when(setupDetails.getDbId()).thenReturn("1");
repository = new TagRepository(setupDetails);
}
答案 1 :(得分:0)
确实是这种情况,你的工作就是&#34;是要走的路。 有些人会认为这是一个很好的做法,因为当你向测试中的类引入更多成员时,你的测试将无法编译,因为你还要将它们添加到构造函数中。