使用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注释)?

最佳答案

我能够解决此问题的唯一方法是尝试控制在这种情况下放弃Mockito批注的Mockito设置顺序:

public void setUp() {
    setupDetails = mock(SetupDetails.class);
    when(setupDetails.getDbId()).thenReturn("1");

    repository = new TagRepository(setupDetails);
}

10-05 19:35