构造函数

时间:2017-08-16 15:47:03

标签: java unit-testing mockito

使用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@Testwhen()内的方法调用:

when(setupDetails.getSourceId()).thenReturn("1");

无效符合预期。 Mockito似乎只在调用@InjectMocks TagRepository构造函数后存根方法调用,导致null返回而不是"1"

有没有办法在调用构造函数之前准备好存根(使用Mockito注释)?

2 个答案:

答案 0 :(得分:0)

我能够解决此问题的唯一方法是尝试控制Mockito设置此场景放弃Mockito注释的顺序:

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

    repository = new TagRepository(setupDetails);
}

答案 1 :(得分:0)

确实是这种情况,你的工作就是&#34;是要走的路。 有些人会认为这是一个很好的做法,因为当你向测试中的类引入更多成员时,你的测试将无法编译,因为你还要将它们添加到构造函数中。