为了账号安全,请及时绑定邮箱和手机立即绑定

JMockit - 意外调用

JMockit - 意外调用

www说 2023-04-26 16:49:41
我有一个使用 JMockit 进行单元测试的简单实现。实现如下Team班级public class Team {    private TeamLeader teamLeader;    public Team(TeamLeader teamleader) {        this.teamLeader = teamleader;    }    public boolean hasDiscussion() {        System.out.println("Discussion is hold by " + teamLeader.getName());        Discussion discussion = new Discussion();        return discussion.start();    }}TeamLeader班级public class TeamLeader {    private String name;    public TeamLeader(String name) {        this.name = name;    }    public String getName() {        return name;    }}Discussion班级public class Discussion {    public boolean start() {        return false;    }}然后,我有一个单元测试来测试功能hasDiscussion如下@RunWith(JMockit.class)public class TeamTest {    private Team team;    @Test    public void hasDiscussion(@Mocked TeamLeader teamLeader, @Mocked Discussion discussion) {        new Expectations() {{            teamLeader.getName(); result = "teamleader";            discussion.start(); result = true;        }};        team = new Team(teamLeader);        boolean actualResult = team.hasDiscussion();        new Verifications() {{            assertThat(actualResult, is(true));        }};    }}执行测试时,出现以下错误Unexpected invocation of:entity.Discussion#Discussion()   on instance: entity.Discussion@7b70deb2when was expecting an invocation of:entity.Discussion#start()   on mock instance: entity.Discussion@6f93ad02mockit.internal.UnexpectedInvocation: Unexpected invocation of:entity.Discussion#Discussion()   on instance: entity.Discussion@7b70deb2when was expecting an invocation of:对这类问题有什么想法吗?
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

发生这种情况是因为您的hasDiscussion方法正在创建类的新实例Discussion,在这种情况下,您不能模拟它。要解决这个问题,您可以接收Discuss类作为方法的参数并发送模拟,我们在Team类构造函数中注入 Discuss 类。



查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信