使用JUnit测试写入csv文件

时间:2014-06-30 09:38:44

标签: java junit junit4 easymock

我是junit测试的新手,我想编写单元测试。实际上这些方法不会返回任何内容。它采用信号列表并将其写入csv文件。我不知道如何使用void返回类型测试方法。

任何人都可以帮助我?

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();
        }
    }
 }
}

2 个答案:

答案 0 :(得分:3)

  

一个人拿一张地图并对其进行排序。

传入包含已知未排序值的地图。验证在调用方法后地图已经过排序。

  

另一个获取有序映射并将其写入csv文件。我不知道如何使用void返回类型测试方法。

两个选项:

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

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

答案 1 :(得分:1)

文件的单元测试

如果您不想更改src代码:

在单元测试中,我会将文件传递给临时路径,调用它创建csv方法和 然后打开文件并依赖您想要投入多少精力:

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

但在大多数情况下,OutputStreamFile参数更灵活 在生产代码中,您在单元测试FileOutputStream中传递了ByteArrayOutputStream,您可以使用ByteArrayInputStream进行解析。

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

排序单元测试 只需创建一个未排序的地图。叫你排序,并检查要排序的结果: 迭代并检查每个下一个元素是否大于前一个元素(或者更小,具体取决于排序顺序)

只需