首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造函数中未使用的注入模拟行为

构造函数中未使用的注入模拟行为
EN

Stack Overflow用户
提问于 2017-08-16 15:47:03
回答 2查看 119关注 0票数 2

使用Mockito 注释 (MockitoJUnitRunner.class@InjectMocks@Mock):

代码语言:javascript
复制
@RunWith(MockitoJUnitRunner.class)
public class TagRepositoryTest {

    @InjectMocks
    private TagRepository repository;

    @Mock
    private SetupDetails setupDetails;

    ....
}

我在构造函数中使用注入的依赖项让测试目标类

代码语言:javascript
复制
public class TagRepository {

    private final Collection<Tag> tags;

    @Autowired
    public TagRepository(SetupDetails setupDetails) {
        this.tags = Arrays.asList(
                new Tag("name", setupDetails.getSourceId()),
                ...
        );
    ...
}

目前,我正在-- @Setup中的方法调用或when()@Test中的方法调用

代码语言:javascript
复制
when(setupDetails.getSourceId()).thenReturn("1");

这是不像预期的那样工作。Mockito似乎只在调用@InjectMocks TagRepository构造函数之后对方法调用进行存根,从而返回null而不是"1"

是否有办法在调用构造函数之前(使用Mockito注释)使存根就绪?

EN

回答 2

Stack Overflow用户

发布于 2017-08-16 15:47:03

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

代码语言:javascript
复制
public void setUp() {
    setupDetails = mock(SetupDetails.class);
    when(setupDetails.getDbId()).thenReturn("1");

    repository = new TagRepository(setupDetails);
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-16 16:23:06

事实上,情况就是这样,你的“周密工作”就是要走的路。有些人会认为这是一个很好的实践,因为当您向被测试的类引入更多成员时,您的测试将不会编译,因为您还会将它们添加到构造函数中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45717978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档