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

为什么我需要向 Java 接口添加方法,以便在 Junit 单元测试中访问它?

为什么我需要向 Java 接口添加方法,以便在 Junit 单元测试中访问它?

Helenr 2023-11-01 17:04:04
我主要是一名 C#、.NET 开发人员,习惯 C# 中的接口和 TDD。C# 中的接口主要定义实现时的契约。Java 中的用法似乎略有不同。特别是,我遇到的每个项目似乎都实现了用于访问应用程序的基本接口,就好像任何 Java 应用程序都需要使用接口一样。我想我缺少一些基本的理解,所以我真的很感激任何关于我可以阅读的好入门书的提示。例如,我有一个如下所示的测试(在我的解决方案中的单独“测试”文件夹中):Tests.javapackage com.dius.bowling;class DiusBowlingGameTest {    private BowlingGame bowlingGame;    @BeforeEach    void setUp() {        this.bowlingGame = new DiusBowlingGame();        this.bowlingGame.startGame();    }为了能够访问,this.bowlingGame.startGame();我需要将该方法添加到接口中。为什么?我不知道 Java 和 C#/.NET 之间似乎存在差异?界面package com.dius.bowling;/** * Interface for a bowling game. */public interface BowlingGame {    /**     * roll method specifying how many pins have been knocked down     * @param noOfPins no. of pins knocked down     */    void roll(int noOfPins);    /**     * get player's current score     * @return player's current score     */    int score();    void startGame();}Dius保龄球游戏package com.dius.bowling;/** * Scoring system for tenpin bowls */public class DiusBowlingGame implements BowlingGame {    ArrayList<BowlingFrame> gameFrames = new ArrayList<BowlingFrame>();    public void roll (int noOfPins) {       /* Implementation */    }    }    /**     * Activate the 1st frame of the game     */    public void startGame() {        advanceFrame();    };
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

如果它不在接口中,并且您将引用存储在接口类型的变量中,那么编译器如何知道该方法存在?


一般来说,分配给变量的值可以是 的任何实现BowlingGame。除非该方法位于接口上,否则不需要这些类实现该方法。


为了避免将方法添加到接口中,请将变量类型更改为DiusBowlingGame,或在方法中使用局部变量setUp:


DiusBowlingGame bowlingGame = new DiusBowlingGame();

bowlingGame.startGame();

this.bowlingGame = bowlingGame;


查看完整回答
反对 回复 2023-11-01
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

据我所知,接口在 C# 和 Java 中的工作方式是相同的。唯一的区别是,在 C# 中,通常以“I”开头来命名接口,并且在 C# 中,类和接口都使用运算符,而在:Java 中,关键字implements用于接口,关键字extends用于类。您的代码不需要接口,它也可以这样完美地工作:


package com.dius.bowling;


class DiusBowlingGameTest {


private DiusBowlingGame bowlingGame;


@BeforeEach

void setUp() {

    this.bowlingGame = new DiusBowlingGame();

    this.bowlingGame.startGame();

}


查看完整回答
反对 回复 2023-11-01
  • 2 回答
  • 0 关注
  • 293 浏览

添加回答

举报

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