如何在JUnit5中测试列表?

时间:2019-05-07 08:20:50

标签: java junit5

当我尝试测试2个ArraysLists时出现错误。 似乎错误是在我的removeEndWith_at方法中说“ toArray()未定义”。你们能给我建议如何测试这两个ArraysList吗?

谢谢。

Java版本:jdk-10.0.2
JUnit:5

[ArrayListIterator类]

import java.util.Iterator;
import java.util.List;

public class ArrayListIterator {

    /**
     * @param wordsAl : list of words
     */
    public List<String> removeEndWith_at(List<String> wordsAl) {
        Iterator<String> iterator = wordsAl.iterator();
        while (iterator.hasNext()) {
            if (iterator.next().endsWith("at"))
                iterator.remove();
        }

        return wordsAl;
    }

}

[ArrayListIteratorTest类]

import static org.junit.Assert.assertArrayEquals;

import java.util.Arrays;
import java.util.List;

import org.junit.jupiter.api.Test;

class ArrayListIteratorTest {

    ArrayListIterator alIterator = new ArrayListIterator();
    List<String> actualWords = Arrays.asList("Apple", "Bat", "Orange", "Cat");

    @Test
    void testremoveEndWith_at() {
        actualWords = alIterator.removeEndWith_at(actualWords);
        List<String> expectedvalue = Arrays.asList("Apple", "Orange");
        assertArrayEquals(expectedvalue.toArray(), actualWords.toArray());
    }

}

2 个答案:

答案 0 :(得分:3)

看看

  

remove() on List created by Arrays.asList() throws UnsupportedOperationException

Arrays.asList()

方法只是围绕原始元素创建一个包装器,并且在该包装器上没有实现会更改其大小的方法。

还要看看我对方法removeEndWith_at的实现。它比您的版本更简单

        /**
     * @param wordsAl : list of words
     */
    public List<String> removeEndWith_at(List<String> wordsAl) {
            wordsAl.removeIf(s -> s.endsWith("at"));
            return wordsAl;
    }

答案 1 :(得分:0)

使用Jupiter断言API比较List<String>的两个实例时,请尝试assertLinesMatch