比较可能来自不同内部顺序的字符串

时间:2012-04-18 15:36:40

标签: java string junit compare assert

我正在编写一个JUnit测试,用于检查一个统一字符串中的消息(每行一条消息)。格式如下:

  

[* Alice *的留言]

     

嘿,第一条消息

     

第二条消息

     

[* Jim *的留言]

     

奥莱

     

你在吗?

     

[* General Messages *]

     

欢迎大家!

     

这是另一条消息。

问题是我收到的实际字符串顺序可能会改变(除了总是出​​现在字符串末尾的常规消息)。例如:有一次我可以先获取Jim的消息,所以当我尝试使用assertEquals()时,测试失败。不幸的是,我无法访问生成消息的代码,因此我无法进行任何修改。

比较这些字符串并验证它们是否相同的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

您应该重新组织测试以解决任意重新排序问题,例如:

  • 将字符串拆分为单独的消息
  • 单独的常规消息和所有其他消息
  • 以相同的顺序(例如按字母顺序排列)订购预期和实际消息
  • 比较预期和实际消息的有序列表。现在它们的订购方式相同,它们应该逐项列出
  • 检查一般消息是否在实际消息流中的所有其他消息之后。

答案 1 :(得分:2)

你最好比较Set个消息,因为你所经历的模糊字符串比较会变得太棘手......