首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java Mockito PotentialStubbingProblem:严格存根参数不匹配错误

Java Mockito PotentialStubbingProblem:严格存根参数不匹配错误
EN

Stack Overflow用户
提问于 2020-11-14 01:05:45
回答 1查看 1.7K关注 0票数 1

我有下面的方法,我需要使用mockito进行测试:

代码语言:javascript
运行
复制
public User update(project.models.domain.User userObject) {

        var user = validateIfUserExists(userObject);
        var agroupmentFoundInDatabase = validateIfUserExistsInAgroupmentTable(userObject);
        
        User result = userRepository.save(user);
        
        if(!agroupmentFoundInDatabase.getProfileCode().equals(userObject.getProfile().getCode())) {     
            userUnionProfileRepository.delete(agroupmentFoundInDatabase);
            userUnionProfileRepository
            .save(UserUnionProfile.builder().userCode(userObject.getId())
                    .profileCode(userObject.getProfile().getCode()).build());
        }

        return result;
    }

这是我的测试方法:

代码语言:javascript
运行
复制
@Test
public void update() throws Exception {

br.com.rd.productmodels.product.domain.User userObject = mockUser();

User user = User.builder().code(135).description("test").build();
when(repository.findById(any())).thenReturn(Optional.of(user));
when(mapper.map(userObject, User.class)).thenReturn(user);

UserUnionProfile agroupmentObject = UserUnionProfile.builder().userCode(135).profileCode(12).build();
when(userUnionProfileRepository.findById(any())).thenReturn(Optional.of(agroupmentObject));
when(mapper.map(agroupmentObject,UserUnionProfile.class)).thenReturn(agroupmentObject);

when(repository.save(any())).thenReturn(user);
        
User entity = service.update(userObject);

verify(repository).save(any());
assertNotNull(entity);
}

但是当我运行我的测试时,它给出了以下消息:

代码语言:javascript
运行
复制
PotentialStubbingProblem: Strict stubbing argument mismatch. Please check:
 - this invocation of 'map' method:
    mapper.map(Optional[UserUnionProfile(userCode=135, profileCode=12)],class project.domain.UserUnionProfile
);

我试过使用@MockitoSettings(strictness = Strictness.LENIENT)。错误消失了,但是在执行mapper.map(Optional[UserUnionProfile(userCode=135, profileCode=12)],class project.domain.UserUnionProfile行之后,我的结果是null。我该怎么办?

#更多关于我尝试测试的update方法的详细信息。下面是调用的其他方法:

代码语言:javascript
运行
复制
private User validateIfUserExists(project.models.domain.User userObject) {

    var user = userRepository.findById(userObject.getId());

    if (user.isEmpty()) {
        throw new UserNotFoundException(userObject.getId());
    }

    return mapper.map(userObject, User.class);
}

private UserUnionProfile validateIfUserExistsInAgroupmentTable(project.models.domain.User userObject) {

        var agroupmentObject = userUnionProfileRepository.findById(userObject.getId());

        if (agroupmentObject.isEmpty()) {
            throw new AgroupmentNotFoundException(userObject.getId());
        }

        return mapper.map(agroupmentObject, UserUnionProfile.class);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-14 22:15:01

如果调用以下命令,测试应该会通过:

代码语言:javascript
运行
复制
when(mapper.map(Optional.of(agroupmentObject), UserUnionProfile.class)).thenReturn(agroupmentObject);

而不是:

代码语言:javascript
运行
复制
when(mapper.map(agroupmentObject, UserUnionProfile.class)).thenReturn(agroupmentObject);

因为在validateIfUserExistsInAgroupmentTable()中映射的不是UserUnionProfile,而是Optional<UserUnionProfile>

但是,我认为您真正想要的是更改方法的实现并映射Optional的实际内容,而不是Optional本身:

代码语言:javascript
运行
复制
return mapper.map(agroupmentObject.get(), UserUnionProfile.class);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64825049

复制
相关文章

相似问题

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