2014-06-30 165 views
0

我是junit测试的新手,我想写单元测试。其实这些方法不会返回任何东西。它将信号列表写入一个csv文件。我不知道如何用void返回类型测试方法。使用JUnit测试写入csv文件

任何人都可以帮到我吗?

public void createCSV (final ArrayList<Signal> messages, File file) 
{ 
    try 
    { 
     // Use FileWriter constructor that specifies open for appending 
     csvOutput = new MyWriter(new FileWriter(file, false), ','); 

     // Create Header for CSV 
     csvOutput.writeRecord("Message Source"); 
     csvOutput.writeRecord("Message Name"); 
     csvOutput.writeRecord("Component"); 
     csvOutput.writeRecord("Occurance"); 
     csvOutput.writeRecord("Message Payload with Header"); 
     csvOutput.writeRecord("Bandwidth(with Header %)"); 
     csvOutput.writeRecord("Message Payload"); 
     csvOutput.writeRecord("Bandwidth(%)"); 
     csvOutput.endOfRecord(); 

     for (Signal signal : messages) 
     { 
      csvOutput.writeRecord(signal.getSource()); 
      csvOutput.writeRecord(signal.getName()); 
      csvOutput.writeRecord(signal.getComponent()); 
      csvOutput.writeRecord(Integer.toString(signal.getOccurance())); 
      csvOutput.writeRecord(Integer.toString(signal 
       .getSizewithHeader())); 
      csvOutput.writeRecord(Float.toString(signal 
       .getBandwidthWithHeader())); 
      csvOutput.writeRecord(Integer.toString(signal.getSize())); 
      csvOutput.writeRecord(Float.toString(signal.getBandwidth())); 
      csvOutput.endOfRecord(); 
     } 
    } 
    catch (IOException e) 
    { 
     logger.error("Error in writing CSV file for messages", e); 
    } 
    finally 
    { 
     try 
     { 
      if (csvOutput != null) 
      { 
       csvOutput.flush(); 
       csvOutput.close(); 
      } 
      messages.clear(); 
     } 
     catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 
} 
+0

http:// stackoverflow可能存在重复。问题/ 3381801 /如何做我的单元测试保存文件到磁盘 – Raedwald

回答

1

的文件单元测试

如果你不想要的改变src代码:

在单元测试中,我将一个文件传递到一个临时路径,呼叫建立CSV方法和 然后打开多少努力的文件和dependendent你想投资:

检查
1)如果文件存在(使用的文件名generea泰德包含当前时间)
2)检查该长度大于0字节
3)读出的第一行和最后一行,并检查其预期内容

但在大多数情况下,OutputStream比更灵活一个File参数。
在生产性代码中,您通过FileOutputStream,在您的单元测试中使用ByteArrayOutputStream,您可以使用ByteArrayInputStream进行解析。

这是更清洁的解决方案,因为它不会创建应该清理的文件,而且运行速度更快。

单元测试排序 只需创建一个未排序的地图。排序打电话给你,并检查结果进行排序: 迭代,并检查各下一个元素是(根据排序顺序或更小)

只是

3

一个需要比之前的如更大映射并对其进行分类。

传入具有已知未排序值的地图。在调用方法后验证地图是否已排序。

另一个将已排序的地图写入一个csv文件。我不知道如何用void返回类型测试方法。

两个选项:

  1. 传递一个临时文件的路径,例如请参阅JUnit temporary folders,然后在调用该方法后读取该文件并测试其是否正确。

  2. 调整您的方法以接受OutputStream而不是File。然后您可以通过ByteArrayOutputStream并通过调用toByteArray()并检查字节来验证其内容。

+0

好吧我创建了一个具有未分类值的地图,我调用传递该地图的方法如何验证地图是现在排序为方法不会返回排序映射 – Wearybands

+0

@UmairIqbal无论是手工制作一个有排序的映射并比较两者,还是使用您信任的现有排序方法(例如来自JDK)对映射进行排序并进行比较。 –

+0

我的问题是我有两个地图完全相同的内容一个排序,另一个未排序我将未排序的地图传递给排序地图的方法。我怎样才能比较他们?我需要任何断言吗?怎么样? – Wearybands