亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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: [email protected]: Unexpected invocation of:entity.Discussion#Discussion()   on instance: entity.Discussion@7b70deb2when was expecting an invocation of:對這類問題有什么想法嗎?
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

發生這種情況是因為您的hasDiscussion方法正在創建類的新實例Discussion,在這種情況下,您不能模擬它。要解決這個問題,您可以接收Discuss類作為方法的參數并發送模擬,我們在Team類構造函數中注入 Discuss 類。



查看完整回答
反對 回復 2023-04-26
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號