第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何斷言為私有字段分配了適當(dāng)?shù)闹担?/h1>

我有以下課程:public class Game {    @Getter    private String gameId;    private String player1Id;    private String player2Id;    private String currentPlayer;    private Board board;    public Game() {        board = new Board();        gameId = UUID.randomUUID().toString();    }    public void joinGame(String playerUUID) {        if (player1 == null) {            player1 = playerUUID;            currentPlayer = player1;        } else if (player2 == null) {            player2 = playerUUID;        } else {            throw new IllegalArgumentException("Cannot join");        }    }    .....}我想測(cè)試 joinGame() 方法中的邏輯:@Testvoid testJoinGame() {    String player1Id = UUID.randomUUID().toString();    String player2Id = UUID.randomUUID().toString();    game.joinGame(player1Id);    game.joinGame(player2Id);    // this won't compile of course as fields are private    assertEquals(player1Id, game.player1Id);    assertEquals(player2Id, game.player2Id);    assertEquals(player1Id, game.currentPlayer);}正如我經(jīng)常讀到的那樣,在我的 JUnit 測(cè)試中我不應(yīng)該做兩件壞事: 1. 更改字段的可見性以使測(cè)試工作。2. 使用反射來獲取私有字段的值。(我可以看到這兩種方法在我從事的項(xiàng)目中被大量使用,但我們假設(shè)它們沒有)。另外,我有時(shí)會(huì)讀到,如果我想測(cè)試我的私有字段,那么這意味著該類的接口定義錯(cuò)誤。但我想說,在這個(gè)例子中,情況并非如此:兩個(gè)用戶 ID 都只在類內(nèi)部使用,不需要公開它們。我仍然想確保順序是正確的:第一個(gè)嘗試加入游戲的用戶將是玩家 1(+ 他/她將是當(dāng)前用戶,例如將邁出第一步),第二個(gè) - 玩家 2。我想問一下測(cè)試這種方法的正確解決方案是什么?
查看完整描述

2 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

有兩種明顯的方法。

  • 測(cè)試實(shí)際使用這些值的位置。如果變量不在類外使用,為什么它們?cè)谀抢??在提供的代碼中,您只需要測(cè)試您是否獲得了IllegalArgumentException適當(dāng)?shù)拇a。

  • 添加“獲取”方法。

我更喜歡第一個(gè)。


查看完整回答
反對(duì) 回復(fù) 2022-03-10
?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊

我同意 Tom Hawtin 的回答,但我會(huì)把它們翻過來這么說:

  • 單元測(cè)試通常應(yīng)該避免查看被測(cè)類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。他們應(yīng)該測(cè)試類如何與抽象邊界之外的事物交互。

  • 如果您在單元測(cè)試中查看“盒子內(nèi)部”,那么如果實(shí)現(xiàn)發(fā)生更改,測(cè)試可能會(huì)不必要地中斷。是的,您可以修復(fù)測(cè)試,但是您會(huì)遇到知道非測(cè)試代碼是否也被破壞的問題。

另一方面,查看“盒子內(nèi)部”可能會(huì)更容易編寫測(cè)試用例。如果您決定采用這種方法:

  • 添加單元測(cè)試用例可以使用的 getter 將允許其他代碼依賴于實(shí)現(xiàn)細(xì)節(jié)。這是一個(gè)壞主意,即使 getter 是以防止修改的方式實(shí)現(xiàn)的。(您仍然有潛在的不想要的耦合,并且對(duì)您的類實(shí)現(xiàn)細(xì)節(jié)的更改會(huì)破壞事情)。

  • 也可以使用反射從測(cè)試用例中檢查私有字段。這很丑陋,但可以說比 getter 更好,因?yàn)椤捌胀ā贝a不會(huì)這樣做。實(shí)現(xiàn)更改仍然可能破壞單元測(cè)試......但只有單元測(cè)試。


查看完整回答
反對(duì) 回復(fù) 2022-03-10
  • 2 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

了解更多

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)