我有一個使用 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 類。
添加回答
舉報
0/150
提交
取消