2016-12-05 72 views
-2

为什么我不能成功测试这种情况?如何修复代码以通过JUnit和POI测试案例?

@Test 
public void test_Should_be_0() throws Exception { 

    HSSFCell cell = new HSSFWorkbook().createSheet().createRow(0).createCell(0); 
    cell.setCellValue(0); 

    assertTrue(cell == 0); 

谢谢你的帮忙。

+2

它是如何编译的,你试着比较一个引用与'0',这不能肯定的工作。 –

+0

@NicolasFilotto:感谢您的快速回复,但是当我写了cell.setCellValue(0);我没有把价值放在细胞中吗? –

+0

是的,但它不是你真正测试的,请查看我的答案以获取更多详细信息 –

回答

1

您的测试assertTrue(cell == 0)是不正确的,实际上你尝试用0比较对象的引用,不能工作,因为他们是不兼容的类型,如果你想查询的单元格的值是否为0,你倒是应该这样做即:

assertEquals(0.0, cell.getNumericCellValue(), 0.0); 
+0

你知道任何一本书,了解如何测试POI单元或项目吗? –

+0

没有抱歉,我不 –

+0

有错,如果我pone:'assertEquals(1,cell.getNumericCellValue(),3);'测试再次正常工作,但这是错误的! –

0

我觉得这一种方式来测试代码:

1)

@Test 
    public void test_Should_be_0() throws Exception { 

     HSSFCell cell = new HSSFWorkbook().createSheet().createRow(0).createCell(0); 
     cell.setCellValue(0); 
     Assert.assertTrue(cell.getNumericCellValue() == 0); 

或2)

@Test 
    public void test_Should_be_0() throws Exception { 

     HSSFCell cell = new HSSFWorkbook().createSheet().createRow(0).createCell(0); 
     cell.setCellValue(0); 
     HSSFCell cell2 = new HSSFWorkbook().createSheet().createRow(0).createCell(0); 
     cell2.setCellValue(0); 
     Assert.assertTrue(cell.getNumericCellValue() == cell2.getNumericCellValue()); 

因为如果数字是不同的测试不起作用。

+0

第二个例子是一个坏主意。如果您正在尝试测试'setCellValue()'或'getNumericCellValue()'并且其中一个是坏的,那么在给定相同输入的情况下,它总是以相同的方式失败。因此,如果'cell.setCellValue(0)'在单元格中放置了一个'9999','assertTrue(cell.getNumericCellValue()== 0)'应该失败,因为它应该返回一个'9999'。但是,如果您将两个单元格的值设置为'setCellValue(0)',然后使用'getNumericCellValue()'比较结果,则它们应该相等,并且测试2中的断言总是会通过,即使函数不正确。 – jmarkmurphy