【问题标题】:How do I go about this unit test?我该如何进行这个单元测试?
【发布时间】:2017-04-14 01:23:32
【问题描述】:

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

我已经尝试过了,但我现在很难过。该代码只是打印出一个名字数组并去掉特殊字符。我想测试代码的第一行,测试特殊字符是否被剥离。

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));
}

【问题讨论】:

  • 将要测试的第一部分提取到返回 List 的方法中,然后测试该方法。
  • “测试代码的第一行并测试是否去除了特殊字符”:这不是第一行所做的。它只是将字符串拆分为由空格或连字符分隔的部分。
  • @Henry 字符串在代码的下半部分被拆分。第一行按照你说的做。我解释错了。我只是想知道如何将它作为单元测试进行测试。对于这两个步骤。我无法绕过它。
  • 我认为你的困惑源于想要测试System.out.println,但你不能(或不应该尝试)测试它。您需要执行 Bohemian 建议的操作并更改您的代码,以便测试复杂的部分。当人们想要对网站上的 HTML 进行“单元测试”时,他们会面临类似的问题。

标签: java unit-testing


【解决方案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 是其中之一),而不是假设代码打印到控制台。然后,您可以让您的测试代码将 PrintStream 传递给代码,然后检查其内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多