使用JUnit在标准输出上测试一些复杂的String吗?

时间:2019-04-13 10:14:04

标签: java unit-testing junit

使用JUnit在标准输出上测试某些复杂String的最佳方法是什么?

我正在使用JUnit对Java程序进行一些测试。我想测试一些在标准输出中显示复杂String的方法。

例如,我有一个显示的方法:

Index   Marque  Modèle  Pays    Vente   
1       Renault Clio    France  12000   
2       Peugeot 208     France  9900    

因此,有一些\t\n,一些空格和很多文本。我已经进行了此测试(可以正常工作),但似乎不是一个好习惯:

String s = System.getProperty("line.separator");    
assertEquals("Index\tMarque\tModèle\tPays\tVente\t"+s+"1\tRenault\tClio\tFrance\t12000\t"+s+"2\tPeugeot\t208\tFrance\t9900\t"+s, outContent.toString());

这看起来很麻烦,很费力,但是可以,但是也许有更好的方法。

1 个答案:

答案 0 :(得分:0)

在编写单元测试时,每种测试方法都应仅在主题单元上验证单一期望

在我看来,您的复杂输出具有多个这样的单个期望

  1. 输出包含标题行
  2. 标题行的“字段”至少用\t字符分隔
  3. 每行以系统行分隔符结尾
  4. 每个产品添加单独的一行
  5. 所有产品线在第一个字段中均以连续的数字开头
  6. ...

创建所有这些测试方法可能看起来需要很多工作,但请考虑以下问题:

  • 测试方法的名称准确描述了设备的功能
  • (偶然地)更改逻辑时,仅通过查看测试结果,就可以非常准确地描述单元如何在不进行调试的情况下使已定义的行为失败。