我该如何进行单元测试?

时间:2017-04-13 17:03:54

标签: java unit-testing

我不知道如何为我的某些代码编写单元测试。我理解代码中发生了什么,但我不确定如何为它编写单元测试。

我试过了,但此刻我很难过。代码只是打印出一个名字数组并删除特殊字符。我想测试代码的第一行并测试特殊字符是否被剥离。

firstNameParts = new ArrayList<String>(Arrays.asList(first.split("( |-)")));
System.out.println("Length of First Name Parts: " + firstNameParts.size());
for (int i = 0; i < firstNameParts.size(); i++) {
    System.out.println("First Name Part " + i + ":" + firstNameParts.get(i));
    // strip out special chars
    firstNameParts.set(i,firstNameParts.get(i).replaceAll("[^A-Za-z]+", ""));
    System.out.println("Stripped First Name Part " + i + ":" + firstNameParts.get(i));
}

1 个答案:

答案 0 :(得分:1)

要测试并更好地组织代码,您应该将“操作”代码与“呈现”代码分开。这使得每个操作单元都可以轻松测试:

static List<String> extractNameParts(String name) {
    return new ArrayList<String>(Arrays.asList(first.split("[ -]")));
}

static String removeSpecialChars(String str) {
    return  str.replaceAll("[^A-Za-z]+", "");
}

这些显然很容易测试,因为他们只做一件事。

请注意该方法的名称基本上是代码中注释的变体。根据经验,不是编写注释,而是创建方法。这样做正式命名代码,使其可重用和可测试。您的代码看起来更整洁,更易读。

以下是它的样子:

firstNameParts = extractNameParts(first);
System.out.println("Length of First Name Parts: " + firstNameParts.size());

for (int i = 0; i < firstNameParts.size(); i++) {
    String namePart = firstNameParts.get(i);
    System.out.println("First Name Part " + i + ":" + );
    firstNameParts.set(i, removeSpecialChars(namePart);
    System.out.println("Stripped First Name Part " + i + ":" + namePart);
}

至于测试输出,您可以将代码打印到指定的PrintStream(其中System.out为1),而不是假设代码打印到控制台。然后,您可以让测试代码将PrintStream传递给代码,然后检查其内容。