0

JUnit テストを既存のプロジェクトに追加するために、Eclipse で Java の演習に取り組んでいます。これは課題でも何でもなく、Eclipse に慣れるための方法です (私は以前 BlueJ を使用していました)。しかし、私が書いた 2 つのテスト メソッドは機能していないようです。何らかの理由で、私が作成した Circle オブジェクト (3 つの異なる円に 6、8、および 2 として設定した半径フィールドを持つ) はデフォルトで半径 0 のままなので、両方のテスト メソッド (1 つは実際にはそうします)動作するように報告しますが、これは円周が >= 0 であることを確認しているためです) 失敗。私は何を間違えましたか?私は経験豊富なプログラマーではないので、ほとんどの人にとって間違いは明白かもしれません。

import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


public class CircleTest {
    Circle circle1;
    Circle circle2;
    Circle circle3;
@Before
public void setUp() throws Exception {

    circle1 = new Circle(6.00);
    circle2 = new Circle(8.00);
    circle3 = new Circle(2.00);
}




@Test
public void testCircumference() {
    assertTrue(circle1.circumference() >= 0);
    assertTrue(circle2.circumference() >= 0);
    assertTrue(circle3.circumference() >= 0);

}

@Test
public void testGetter() {
    assertEquals(6, circle1.getRadius(), 1e-15);
    assertEquals(8, circle2.getRadius(), 1e-15);
    assertEquals(2, circle3.getRadius(), 1e-15);

}

@After
public void tearDown() throws Exception {
}

}
4

4 に答える 4

1

によって返される値は、プリミティブ型のデフォルト値である可能性がgetRadius高い0.0double

のコンストラクターで半径が割り当てられていることを確認しますCircle

public Circle(double radius) {
    this.radius = radius;
}

値を返すことができるようにgetRadius

public double getRadius() {
   return radius;
}
于 2013-10-15T15:11:12.103 に答える
0

見てみましょう: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
一言で言えば: 浮動小数点は等号で比較すべきではありません - 絶対差で比較する必要があります: - たとえば、b < 0.00001。
ここに問題の根源があると思います。

于 2013-10-15T15:12:25.887 に答える
0

半径には dobules または float を使用すると仮定します。これらのタイプは正確ではないため、扱いが難しい場合があります。単体テスト フレームワークは、この場合の特別な比較方法を提供します。

http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals%28double,%20double,%20double%29

たとえば、次のように使用します。

 assertEquals(6, circle1.getRadius(), 0.0001);
于 2013-10-15T15:15:03.127 に答える