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

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

確認方法簽名未更改的測試?

確認方法簽名未更改的測試?

守著星空守著你 2022-06-15 17:20:14
這是一種假設(shè)情況。我使用 int 作為類型,但您可以自由地將其替換為您選擇的任何類型,這是一個關(guān)于如何編寫確認沒有人更改方法簽名的測試的問題。我編寫了一個方法,它對整數(shù)非常有效,但如果它接收到某些非整數(shù),將產(chǎn)生非常難以追蹤的錯誤。我想避免錯誤,所以我編寫了一些測試來確認該方法是否正常工作。我正在用 Java 編寫,所以我可以愉快地依賴 Java 的強類型。然而,總有一天,有人會想改變這種方法來接受一些非整數(shù)(可能是我),有時它會起作用(我會為自己感到驕傲)。他們(我)甚至可能編寫一些測試來添加到他們改進的方法版本中,并且這些測試將通過,除非它們通過某些非整數(shù)。是否可以編寫一個測試來確認方法簽名沒有改變?我已經(jīng)嘗試過了,但myClass.multiply(2.0, 2);沒有編譯,所以我無法運行測試。import org.junit.Assert;import org.junit.Test;import static org.junit.Assert.fail;public class TestingCoercion {    @Test    public void multiply2x2() {        MyClass myClass = new MyClass();        Assert.assertEquals(myClass.multiply(2, 2), 4);    }    @Test    public void multiplyDoesNotWorkWithFloat() {        MyClass myClass = new MyClass();        try {            myClass.multiply(2.0, 2); //this line does not compile            fail("MyClass.multiply is only for integers");        } catch (Exception exception) {            Assert.assertTrue("MyClass.multiply correctly rejected a double", true);        }    }    class MyClass {        public int multiply(int i, int j) {            return i * j;        }    }}
查看完整描述

1 回答

?
月關(guān)寶盒

TA貢獻1772條經(jīng)驗 獲得超5個贊

一種方法是使用反射來查找具有特定參數(shù)列表的特定方法。


你可以這樣做:


try {

    MyClass.class.getMethod("multiply", int.class, int.class);

} catch (NoSuchMethodException) {

    // test has failed.

    fail(); //do not swallow this exception, fail the test

}

getMethodNoSuchMethodException如果沒有具有該確切參數(shù)列表的方法,將拋出一個。


如果您還想檢查是否沒有人添加了您將來可能不小心調(diào)用的另一個重載,您也可以:


assertEquals(1, Arrays.stream(MyClass.class.getMethods()).filter(x -> x.getName().equals("multiply")).count());



查看完整回答
反對 回復 2022-06-15
  • 1 回答
  • 0 關(guān)注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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