意外行为测试用例比较字符串列表

Unexpected behaviour test case compare lists of strings

我的测试用例看起来像

public class CheckSortedList {

List<String> expectedList;
ModelController modelController;
IDataReader dataReader;
List<String> tempBookNames = new LinkedList<>();

public CheckSortedList() {
    expectedList = new LinkedList<>();
    try {
        dataReader = new RawDataReader();
        modelController = new ModelController(dataReader);

    } catch (Exception e) {
        fail(e.getMessage());
    }
}

@Before
public void init() {
        // sortierte Liste aus Excel
        expectedList.add("Das große GU-Kochbuch Kochen für Kinder");
        expectedList.add("Das Perfekte Dinner. Die besten Rezepte");
        expectedList.add("Das Piratenkochbuch. Ein Spezialitätenkochbuch mit den 150 leckersten Rezepten ");
        expectedList.add("Genial italienisch");
        expectedList.add("Ich helf dir kochen. Das erfolgreiche Universalkochbuch mit großem Backteil");
        expectedList.add("O'Reillys Kochbuch für Geeks");
        expectedList.add("Schlank im Schlaf ");
        expectedList.add("Schuhbecks Kochschule. Kochen lernen mit Alfons Schuhbeck ");
        modelController.getSortedBooks().forEach(book -> tempBookNames.add(book.getTitle()));
}

@Test
public void test() {

    tempBookNames.forEach(s -> {
        System.out.println(s);
    });
    assertEquals(expectedList, tempBookNames);  

}

}

从逻辑上讲,每件事都应该工作正常,因为结果簿列表与预期的相同,但我注意到 Assert.assertEqual(Object[] array) 已被弃用。我的测试用例失败了,我不明白为什么

输出为 `java.lang.AssertionError: 预期:<[很棒的 GU-Kochbuch 儿童烹饪,完美的晚餐。最佳食谱,海盗食谱。特色菜谱,收录150道最美味的菜谱,精辟的意大利菜,我来帮你做饭。成功的通用食谱,其中包含大量烘焙部分,O'Reilly 的极客食谱,睡眠中的苗条,Schuhbeck 的烹饪学校。和 Alfons Schuhbeck 一起学习烹饪 ]> 但是:<[完美的晚餐。最佳食谱,海盗食谱。 150种最美味食谱的特色菜谱,GU-Kochbuch儿童烹饪大咖,巧夺天工的意大利菜,我来帮你做饭。成功的通用食谱,其中包含大量烘焙部分,O'Reilly 的极客食谱,睡眠中的苗条,Schuhbeck 的烹饪学校。和 Alfons Schuhbeck 一起学习烹饪 ]> 在 org.junit.Assert.fail(Assert.java:88) 在 org.junit.Assert.failNotEquals(Assert.java:834) 在 org.junit.Assert.assertEquals(Assert.java:118) 在 org.junit.Assert.assertEquals(Assert.java:144) 在 de.optivo.buecherverwaltung.test.CheckSortedList.test(CheckSortedList.java:56) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明) 在 java.lang.reflect.Method.invoke(来源不明) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.运行Children(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.运行(ParentRunner.java:363) 在 org.junit.runners.Suite.运行Child(Suite.java:128) 在 org.junit.runners.Suite.运行Child(Suite.java:27) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.运行Children(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.运行(ParentRunner.java:363) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 在 org.eclipse.jdt.internal.junit.运行ner.TestExecution.运行(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.运行ner.RemoteTestRunner.运行 测试(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.运行ner.RemoteTestRunner.运行 测试(RemoteTestRunner.java:678) 在 org.eclipse.jdt.internal.junit.运行ner.RemoteTestRunner.运行(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.运行ner.RemoteTestRunner.main(RemoteTestRunner.java:192)

the output of sysout of the retrieved list完美的晚餐。最好的食谱 海盗食谱。一本包含 150 种最美味食谱的特色食谱 大 GU-Kochbuch 为孩子们做饭 很棒的意大利语 我帮你做饭成功的通用食谱,带有大型烘焙部分 O'Reilly 的极客食谱 睡觉的时候瘦 舒贝克的烹饪学校。和 Alfons Schuhbeck 一起学习烹饪 ` 列表是相同的!

Thomas Kläger 和 JB Nizet 4 贡献后的结果是将 lamda 表达式中的 compareto 替换为 compareToIgnoreCase()。进一步阅读考虑 Sorting arraylist in alphabetical order (case insensitive) andCase sensitive/insensitive Sort in Excel (bug or a feature)