0

JUnit で同じテストを行っても結果が異なります。最初のテストは問題ないようで、すべてのアサーションを検証すると、クラスは正常に機能すると思います。次に、テストを再実行すると、アサーション エラーが発生します。テスト後に「データ」をクリアしなかったことが問題であることに気付き、まさにそれを修正しようとしましたが、まだアサーションの失敗が続いています。

何か案は?

単体テスト:

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * The test class TestHistorial.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class TestHistorial extends junit.framework.TestCase {
    Historial hist;

    /**
     * Default constructor for test class TestHistorial
     */
    public TestHistorial() {
    }

    /**
     * Sets up the test fixture.
     * <p/>
     * Called before every test case method.
     */
    @Before
    public void setUp() {
        hist = new BaseDatos();
    }

    /**
     * Tears down the test fixture.
     * <p/>
     * Called after every test case method.
     */
    @After
    public void tearDown() {
        hist.eliminarTodosLosRegistros();
    }

    /**
     * Prueba
     */

    public void testHistorial() {

        for (int i = 0; i < 20; i++) {
            Registro reg = new RegistroTemperatura(273 + i, 1900 + i, i + 1, i + 1, i);
            try {
                hist.agregarRegistro(reg);
            } catch (Exception e) {
                assertEquals(false, true);
            } // No debería llegar aquí.
            String str = "Reg_" + i;
            Registro tReg = hist.getRegistroPorId(str);
            try {
                Temperatura t = new Temperatura(273 + i);
                assertEquals(true, t.equals(((RegistroTemperatura) tReg).getTemperatura()));
            } catch (Exception e1) {
                assertEquals(false, true);
            } // No debería llegar aquí.
            try {
                Fecha f = new Fecha(1900 + i, i + 1, i + 1, i);
                assertEquals(true, f.equals(tReg.getFecha()));
            } catch (Exception e2) {
                assertEquals(false, true);
            } // No debería llegar aquí.
        }
        assertEquals(20, hist.getNumeroDeRegistros());
        assertEquals(true, hist.getRegistroMasViejo().equals(new RegistroTemperatura(273, 1900, 1, 1, 0)));

    }
}

最初のテスト後のテストの出力は次のとおりです。

$> 予想: false だった: true

問題は、tearDown()`testHistorial()` の後にメソッドが実行されているかどうかです。そうでない場合、どうすればよいですか?

4

1 に答える 1

2

まず、4.0 より前のバージョンの JUnit は使用しないでください。junit.framework.*次に、または で何も使用しないでくださいjunit.extensions.*

それはさておき...

最初の質問に答えるために、JUnit 4.x では、@After注釈付きのメソッドは常にテスト ケースの実行後に実行されます。

問題の本質にたどり着くには...ユニットテストは1つのことをテストする必要があります。それらは機能の単位にすぎません。現在、少なくとも 5 つの異なる部分をテストしています。そのため、何が起こっているのか、なぜ壊れているのかを理解するのが難しいのです。

1 つずつ試してみてください: テストRegistroを行い、本来あるべきことを行っていることを確信してください。次に、 に進みHistorialます。次に、 に進みTemperaturaます。それからFecha一貫性のないアサーション エラーが発生する理由を具体的に説明することはできませんが、実際に何をテストしているのかを理解するのは非常に難しく、それが誤解の原因である可能性があると言えます。

また、一般的なアドバイスとして - をExceptionキャッチしている場合は、それがチェックされた例外 (Java によって強制される) であるか、例外をスローする必要があり、例外後の状態についてアサートする必要がある場合にのみ、テストでキャッチすることを検討してください。投げられます。

于 2013-06-17T02:43:45.427 に答える