簡體   English   中英

不明確的方法調用 Assert 中的 assertEquals(Object, Object) 和 Assert 中的 assertEquals(double, double) 匹配:

[英]Ambiguous method call Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match:

我收到以下錯誤:

Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match

對於我的Junit測試中的這行代碼,請注意getScore () 返回一個double

assertEquals(2.5, person.getScore());

這是我的斷言導入:

import static org.junit.Assert.*;

這是什么原因造成的,我該如何解決?

您的 getScore() 返回Double ,而不是double 因此編譯器很困惑:它應該將兩個參數都轉換為 Object,還是應該只將 Double 轉換為 double?

    double a = 2.0;
    Double b = 2.0;
    // assertEquals(a,b); // fails to compile
    // the compiler is confused whether to use
    assertEquals((Object) a,(Object) b); // OK
    // or
    assertEquals(a,(double) b); // OK

無論如何,我會將方法設置為返回原始類型 double。

如果您對使用Assert.assertEquals(double, double) (原始版本)特別感興趣,請嘗試調用允許偏差並將允許偏差設置為零的覆蓋方法,如下所示:

assertEquals(2.5, person.getScore(), 0.0);

如果允許person.getScore()2.5略有不同,您可能還希望第三個參數不是零。 例如,如果2.500001是可以接受的,那么你的測試變成

assertEquals(2.5, person.getScore(), 0.000001);

如果您特別想避免強制轉換並使用原始版本,則可以從包裝器對象中獲取原始結果。 例如:

    double a = 2.0;
    Double b = 2.0;
    assertEquals(a, b.doubleValue()); //Deprecated so use the one with delta

    Integer c = 2;
    int d = 2;
    assertEquals(c.intValue(), d);

    Long e = 2L;
    long f = 2L;
    assertEquals(e.longValue(), f);

我有同樣的錯誤,我改變了這個:

assertEquals("Server status code is: " +  wmResp.getStatusCode() , 200, wmResp.getStatusCode());

對此

assertEquals("Server status code is: " +  wmResp.getStatusCode() , Integer.valueOf(200), wmResp.getStatusCode());

發生這種情況是因為第一行編譯器將 200 作為原始值(整數而不是整數類)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM