Junit 2.0:同一测试的结果不同

时间:2013-06-17 02:27:01

标签: java unit-testing junit

我在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)));

    }
}

首次测试后的测试结果为:

$&GT;预期:假但是:真实

真正的问题是,在{testHistorial()``之后执行的tearDown()方法是什么?如果 它不是,我该怎么办?

1 个答案:

答案 0 :(得分:2)

首先,don't use any version of JUnit below 4.0.其次,请勿在{{1​​}}或junit.framework.*中使用任何内容。

放在一边......

要回答第一个问题,在JUnit 4.x中,您的junit.extensions.* - 带注释的方法总是在执行测试用例后执行。

要解决问题......你的单元测试应该测试一件事。它们只是一个功能单元。现在,你正在测试至少五个不同的部分,这就是为什么理解正在发生的事情或者它为什么会破坏的原因很复杂。

一点一点地进行:测试@After并确信它正在做它应该做的事情。然后转到Registro。然后转到Historial。然后是Temperatura。我不能具体告诉你为什么它会给你不一致的断言失败,但是我可以告诉你,很难理解你实际上是在做什么测试,这可能是造成误解的原因。

此外,作为通用建议 - 如果您正在捕获Fecha,请考虑仅在测试中捕获它,如果它是一个经过检查的异常(由Java强制执行),或者如果您需要它来抛出异常并且需要在抛出异常后断言关于状态的事情。