2017-01-15 10 views
2

javaのジェネリックメソッドに関するチュートリアルに続き、ジェネリックタイプが含まれるメソッドのユニットテストを作成したいと思います。しかし、私はこのエラーを検索してみましたジェネリックJavaメソッドのテストでエラーが発生しました

私のassertEqualsのエラーあいまいなメソッド呼び出しを与えているが、far.Iので、運がGenericMethods.java

の下に私のJavaおよびテストクラスを投稿していないのです

public class GenericMethods { public <E> void printArray(E[] inputArray){ //Display Array Elements List<E> values = Arrays.asList(inputArray); values.stream() .forEach(System.out::print); } public <T extends Comparable<T>> T returnMax(T x, T y, T z){ T max = x; //Initially assume the firs element is max if(y.compareTo(max) > 0){ max = y; } if(z.compareTo(max) > 0){ max = z; } return max; } } 

GenericMethodsTest.java

public class GenericMethodsTest { 

GenericMethods genericMethods; 
@Before 
public void setUp() throws Exception { 
    genericMethods = new GenericMethods(); 
} 

@Test 
public <T> void shouldReturnCorrectMaximum() throws Exception { 
    assertEquals(5,genericMethods.returnMax(3,4,5)); 

} 
} 

答えて

3

assertEqualsは(Object、Object)と(long、long)の両方を取るためです。

assertEquals(new Integer(5), genericMethods.returnMax(3,4,5)); 
+0

ああ、私はそれを考えるべきです..とにかく感謝 – Ezio

3

にこの場合の具体的Objectのいずれかまたはlongを返すことができ

T returnMax(...) {..} 

である理由は、これを変更してみてください。

Assert class実装では、long, longObject, Objectパラメータの両方にこのメソッドがオーバーロードされています。したがって

assertEquals(5,genericMethods.returnMax(3,4,5)); 

を使用すると、2つのオーバーロードされたメソッドの間のあいまいさを警告します。 new Integer(5)ではなく

static public void assertEquals(Object expected, Object actual) 

Assertクラスから実行されていることを確認します使用して

@ lane.maxwellによって示唆されるように

、。

+1

これをうまく説明していただきありがとうございます。 – Ezio

関連する問題