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

我主要是一名 C#、.NET 开发人员,习惯 C# 中的接口和 TDD。C# 中的接口主要定义实现时的契约。Java 中的用法似乎略有不同。特别是,我遇到的每个项目似乎都实现了用于访问应用程序的基本接口,就好像任何 Java 应用程序都需要使用接口一样。我想我缺少一些基本的理解,所以我真的很感激任何关于我可以阅读的好入门书的提示。


例如,我有一个如下所示的测试(在我的解决方案中的单独“测试”文件夹中):


Tests.java


package 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();

    };


Helenr
浏览 294回答 2
2回答

慕神8447489

如果它不在接口中,并且您将引用存储在接口类型的变量中,那么编译器如何知道该方法存在?一般来说,分配给变量的值可以是 的任何实现BowlingGame。除非该方法位于接口上,否则不需要这些类实现该方法。为了避免将方法添加到接口中,请将变量类型更改为DiusBowlingGame,或在方法中使用局部变量setUp:DiusBowlingGame bowlingGame = new DiusBowlingGame();bowlingGame.startGame();this.bowlingGame = bowlingGame;

陪伴而非守候

据我所知,接口在 C# 和 Java 中的工作方式是相同的。唯一的区别是,在 C# 中,通常以“I”开头来命名接口,并且在 C# 中,类和接口都使用运算符,而在:Java 中,关键字implements用于接口,关键字extends用于类。您的代码不需要接口,它也可以这样完美地工作:package com.dius.bowling;class DiusBowlingGameTest {private DiusBowlingGame bowlingGame;@BeforeEachvoid setUp() {&nbsp; &nbsp; this.bowlingGame = new DiusBowlingGame();&nbsp; &nbsp; this.bowlingGame.startGame();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java