如何在JUnit中检查我们期望返回的确切值?

时间:2019-05-13 10:59:10

标签: java

在下面的示例中,可以检查表单的最后一个元素没有真正出现,因为它已经在列表中。如何检查期望返回的确切值?

public class streamExample2 {

public static void main(String[] args) {
    List<String> stringList = new ArrayList<String>();

    stringList.add("один");
    stringList.add("два");
    stringList.add("три");
    stringList.add("один");

    System.out.println (countstring(stringList));
}

    public static List<String> countstring  (List <String> stringList){
        Stream <String> stream = stringList.stream ();

            List<String>differentStrings = stream .distinct ()
            .collect (Collectors.toList ());

        return differentStrings;
    }
   }

2 个答案:

答案 0 :(得分:2)

您可以使用JUnit轻松测试具有返回值的方法。测试void main有点困难,并且在大型应用程序(那些类比包含main的类更多的应用程序中)没有任何意义。

在您的情况下,我将要测试的代码提取到一种方法中,让我们说以下代码:

import java.util.List;
import java.util.stream.Collectors;

public class StackoverflowDemo {

    public static List<String> getDistinctValuesFrom(List<String> list) {
        return list.stream().distinct().collect(Collectors.toList());
    }
}

由于此方法为static,因此不需要任何类的实例。

通常,对于简单的单元测试,您需要一个输入值和一个预期的输出值。在这种情况下,您可以实现两个列表,一个带有重复项,另一个表示消除第一个列表的重复项的预期结果。
一个JUnit测试用例将预期的输出与实际的输出进行比较(我永远不会用英语正确表达这些介词-请在这里说母语的人,请)。

JUnit使用特定的方法来比较(返回)(方法的)值。
测试该方法的测试类可能如下所示:

import static org.junit.jupiter.api.Assertions.*;

import java.util.ArrayList;
import java.util.List;

import org.junit.jupiter.api.Test;

import de.os.prodefacto.StackoverflowDemo;

class StreamTest {

    @Test
    void test() {
        // provide a list that contains dpulicates (input value)
        List<String> input = new ArrayList<String>();
        input.add("AAA");
        input.add("BBB");
        input.add("CCC");
        input.add("AAA");
        input.add("DDD");
        input.add("EEE");
        input.add("AAA");
        input.add("BBB");
        input.add("FFF");
        input.add("GGG");

        // provide an expected result
        List<String> expected = new ArrayList<String>();
        expected.add("AAA");
        expected.add("BBB");
        expected.add("CCC");
        expected.add("DDD");
        expected.add("EEE");
        expected.add("FFF");
        expected.add("GGG");

        // get the actual value of the (static) method with the input as argument
        List<String> actual = StackoverflowDemo.getDistinctValuesFrom(input);
        // assert the result of the test (here: equal)
        assertEquals(expected, actual);
    }
}

请注意,您也可以并且应该测试不良行为,例如误报或Exception。除了这个简单的示例之外,有关Google的JUnit教程,请阅读其中的一些内容。

  

请注意,测试用例也可能是错误的,这可能会导致严重的麻烦!请仔细检查您的测试,因为期望值可能是错误的,因此尽管正确实施了这些方法,但测试失败的原因。

答案 1 :(得分:0)

这可以通过HashSet完成。 HashSet是仅存储唯一值的数据结构。

@Test
public void testSalutationMessage() {

    List<String> stringList = new ArrayList<String>();

    stringList.add("one");
    stringList.add("two");
    stringList.add("three");
    stringList.add("one");
    Set<String> set = new HashSet<String>();

    stringList.stream().forEach(currentElement -> {
        assertFalse("String already exist in List", set.contains(currentElement));
        set.add(currentElement);
    });

}