Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit2.0:相同测试的不同结果_Java_Unit Testing_Junit - Fatal编程技术网

Java JUnit2.0:相同测试的不同结果

Java JUnit2.0:相同测试的不同结果,java,unit-testing,junit,Java,Unit Testing,Junit,对于JUnit中的同一个测试,我得到了不同的结果。第一个测试似乎没有问题,为了验证所有断言,我相信该类工作正常。然后我重新运行测试,得到一个断言失败。我意识到问题在于我没有在测试后清除“数据”,并且我试图准确地修复它,但是我仍然有那些断言失败 有什么想法吗 单元测试: import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; /** *

对于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)));

    }
}
import static org.junit.Assert.*;
导入org.junit.After;
导入org.junit.Before;
导入org.junit.Test;
/**
*测试类TestHistorial。
*
*@author(你的名字)
*@version(版本号或日期)
*/
公共类TestHistorial扩展了junit.framework.TestCase{
历史史学家;
/**
*测试类TestHistorial的默认构造函数
*/
公共测试历史(){
}
/**
*设置测试夹具。
*

*在每个测试用例方法之前调用。 */ @以前 公共作废设置(){ hist=新的BaseDatos(); } /** *拆下测试夹具。 *

*在每个测试用例方法之后调用。 */ @之后 公共无效拆卸(){ hist.eliminartodoslosristros(); } /** *普鲁巴 */ public void testHistorial(){ 对于(int i=0;i<20;i++){ Registro reg=新登记温度(273+i,1900+i,i+1,i+1,i); 试一试{ Agregaregistro历史(reg); }捕获(例外e){ 资产质量(假、真); }//没有德贝里亚·莱加·阿奎。 String str=“Reg_”+i; Registro tReg=hist.getRegistroPorId(str); 试一试{ 温度t=新温度(273+i); assertEquals(true,t.equals((注册温度)tReg).getTemperatura()); }捕获(异常e1){ 资产质量(假、真); }//没有德贝里亚·莱加·阿奎。 试一试{ Fecha f=新的Fecha(1900+i,i+1,i+1,i); assertEquals(true,f.equals(tReg.getFecha()); }捕获(异常e2){ 资产质量(假、真); }//没有德贝里亚·莱加·阿奎。 } assertEquals(20,hist.getNumeroDeRegistros()); assertEquals(true,hist.getRegistroMasViejo().equals(新的寄存器温度(2731900,1,1,0)); } }

第一次测试后的测试输出为:

$>应为:false,但为:true

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

首先,第二,不要在
junit.framework.*
junit.extensions.*
中使用任何东西

有了它的方式

为了回答第一个问题,在JUnit4.x中,带
@After
-注释的方法总是在测试用例执行之后执行

为了解决问题的实质…您的单元测试应该测试一件事。它们只是一个功能单元。现在,您正在测试至少五个不同的部件,这就是为什么理解发生了什么或者为什么它会断裂是很复杂的

一件一件地做:测试
Registro
,并确信它正在做它应该做的事情。然后转到
Historial
。然后转到
温度a
。然后
Fecha
。我不能具体地告诉您为什么它会导致不一致的断言失败,但我可以告诉您,很难理解您实际测试的内容,这可能是造成误解的原因


也作为一般建议——如果您正在捕获<代码>异常< /代码>,请考虑在测试中仅捕获它,如果它是一个检查异常(由java强制执行),或者如果需要它抛出异常,并且需要在异常被抛出之后断言状态。创建一个单独的测试并使用

@expected
注释。这是一个相当丑陋的单元测试,将其重构为多个测试,将更容易确定故障。好的。哪里可以找到junit2文档?每个测试应该只有一个断言,很少有例外。如果有两个预期相等的复杂对象,并且要报告哪些字段不同,请使用
ErrorCollector@Rule
,并收集断言异常。JUnit的当前版本是4.11。如果您想明确地使测试失败,请使用有意义的消息调用
Assert.fail
;不要使用
assertEquals(真、假)
hack。但是,如果测试中出现意外的异常,只需让方法抛出异常,而不处理它。移除所有try/catch块。抛出异常的JUnit测试被认为没有成功,您将从stacktrace中获得更多有用的信息。我有一个类似的JUnit测试问题,如果您需要测试异常消息,任何人都可以提供帮助。然后还可以使用
ExpectedException@Rule
。他的
@After
方法是不必要的,因为每次运行都会得到一个新的
Historial
。即使它是一个已检查的异常,除非在测试中预期该异常,否则不要捕获它。只需将它添加到方法签名的
throws
子句中。如果需要,请考虑使用<代码>预期属性<代码> @测试< /COD>注释。非常感谢您的建议,我将根据您的建议重构单元测试。请原谅我的语法错误,我学过英语,但还是有点生疏,因为我有一段时间不说不写英语了。