2016-10-15 27 views
1

今日、私は単体テストの研究を進めており、障害を見つけました。私はunittestでテストしたいメソッドを持っていますが、メソッドにエラーがあるかもしれません。メソッドは、このいずれかになります。Junitを使用してオブジェクトを出力するテスト方法

@Override 
public ITimeSpan intersectionWith(ITimeSpan timeSpan) { 

    ITime begintime, endtime; 
    if (bt.compareTo(timeSpan.getBeginTime()) > 0) { 
     begintime = bt; 
    } else { 
     begintime = timeSpan.getBeginTime(); 
    } 

    if (et.compareTo(timeSpan.getEndTime()) < 0) { 
     endtime = et; 
    } else { 
     endtime = timeSpan.getEndTime(); 
    } 
    // aangepast van >= naar <= 
    if (begintime.compareTo(endtime) <= 0) { 
     return null; 
    } 

    return new TimeSpan(begintime, endtime); 
} 

この方法が出力に2つのタイムスパンの時間をオーバーラップから構成される新しいタイムスパンを想定しています。

@Override 
public boolean equals(Object obj){ 
     if (obj == null){ 
      return false; 
     } 
     final TimeSpan other = (TimeSpan) obj; 
     if (this.bt == other.bt && this.et == other.et){ 
      return true; 
     } 
     return false; 
} 
:私はこのようなのTimeSpanクラスのequalsメソッドをオーバーライドしてきたお互いにオブジェクトを比較するために

@Test 
public void testIntersectionWith() { 
    System.out.println("intersectionWith"); 
    ITimeSpan timeSpan = new TimeSpan(new Time (2000,4,4,4,4), new Time(2000,5,5,5,5)); 
    TimeSpan instance3 = new TimeSpan(new Time (2000,4,4,4,4), new Time(2000,8,8,8,8)); 
    ITimeSpan expResult3 = new TimeSpan(new Time (2000,4,4,4,4), new Time(2000,5,5,5,5)); 
    ITimeSpan result3 = instance3.intersectionWith(timeSpan); 


    assertEquals(result3, expResult3); 

    } 

:私はこのようになります。この方法のためのユニットテストを書いています

テストではタイムスパンを見ていますが、テストをパスすることを期待していましたが、推測できる通り、それはしませんでしたし、 "expected:but was"エラーを返します。そして、言うのコードの行にポイント:私はのassertEqualsと、この比較は動作しない理由を理解しようとしてい

assertEquals(result3, expResult3); 

は、それがここで働いていないequalsメソッドをオーバーライドするように見えます。私もhashCode()メソッドをオーバーライドしようとしましたが、それは違いがないようです。

+0

BTW:JUnitアサーションの第1パラメータは期待値であり、第2パラメータは実際の値です。アサーションエラーを正しく理解するだけで、それが助けになるかもしれません。 – Heri

+0

私はすでにそれを変えました、私は今日の難しい道を学びました。私はすぐにそれを忘れそうにないです。 –

答えて

1

@M Cello、私は犯人がここにいると思う "return new TimeSpan(begintime、endtime);"

public ITimeSpan intersectionWith(ITimeSpan timeSpan) { 

ITime begintime, endtime; 
if (bt.compareTo(timeSpan.getBeginTime()) > 0) { 
    begintime = bt; 
} else { 
    begintime = timeSpan.getBeginTime(); 
} 

if (et.compareTo(timeSpan.getEndTime()) < 0) { 
    endtime = et; 
} else { 
    endtime = timeSpan.getEndTime(); 
} 
// aangepast van >= naar <= 
if (begintime.compareTo(endtime) <= 0) { 
    return null; 
} 
//i think the culprit is here, plz print the begintime, endtime and check what are the values its passing other than this everything is working fine 
return new TimeSpan(begintime, endtime); 
} 
+0

先生、あなたは私の一日を作った、これは問題だった。私が書いた平等を知ることは、それが何をすべきかをすることだった。 –

1

あなたのequalsメソッドは間違っていますが、その中に==を使用しています。

これを試してみてください:

if (this.bt.equals(other.bt) && this.et .equals(other.et)){ 
1

私はいくつかの懸念を参照してください。まず、equalsメソッドでequals()を使用してequalityを比較し、==ではなくequalityを比較します。次に、エラーを引き起こすものではなく、equalsメソッドにcheckをタイプするか、CCEを取得する必要があります。あなたのIDがequalsメソッドを自動生成することをお勧めします。 FYI、それはまた欠けているhashCodeメソッドを作成する必要があります。

+0

ありがとう、私はあなたの助言をフォローアップし、equalsメソッドとhashCodeメソッドを自動生成しました。私はこれを習慣にしようとします。ありがとう –

関連する問題