Java新手 - 返回单元测试失败

时间:2016-09-11 18:58:40

标签: java unit-testing methods string-length

我在课堂上研究Java程序,并且我不确定为什么或如何失败,因为我在程序运行时得到了正确的打印输出。

这是我的代码:

import java.util.Scanner;

public class TextAnalyzer {

    // Create scanner

    private static Scanner scnr = new Scanner(System.in);
    // Create text string
    private static String text;

    public static void main(String[] args) {
        System.out.println("Enter a sentence or phrase: ");
        // Scan for text input
        text = scnr.nextLine();

        System.out.println("You entered: " + text);

        // Call getNumOfCharacters
        int count = getNumOfCharacters();
        System.out.println();
        System.out.println("Number of characters: " + count);
        // Call outputWithoutWhitespace
        String modifiedstring = outputWithoutWhitespace();
        System.out.println("String with no whitespace: " + modifiedstring);

    }

    // Method outputs string without spaces

    private static String outputWithoutWhitespace() {
        text = text.trim().replaceAll(" ", "");
        return text;
    }

    // Method to return number of characters

    private static int getNumOfCharacters() {
        return text.length();
    }
}

输出传递到所有级别,它是输入中失败的字符数的单元测试,我真的需要一些指导作为Java编程的新学生。

以下是测试的打印输出:

enter image description here

我的假设是getNumOfCharacters()在删除空格后返回字符数,但我可能错了。

非常感谢任何帮助/指导。

1 个答案:

答案 0 :(得分:3)

您的假设是正确的,问题是您正在使用剥离 text替换text

private static String outputWithoutWhitespace() {
    text = text.trim().replaceAll(" ", "");
    return text;
}

...现在getNumOfCharacters()正在返回剥离的长度,不再是46。

也就是说,当您在main中点击此行时:

String modifiedstring = outputWithoutWhitespace();

它具有替换text的副作用,因为这正是您告诉outputWithoutWhitespace()要做的事情。因此,当main结束时,text现在包含已修改的文本,并且对getNumOfCharacters()的后续调用无法通过单元测试。

您的打印输出具有误导性(仍打印“46”),因为您计算并存储之前的字符数 text中的outputWithoutWhitespace()

这是一个很好的练习,如何处理和管理数据,以及良好的学习体验。这也是质量控制中单元测试价值的一个很好的证明;你应该记住这一课。

这是一个提示:根据您的应用程序要求,outputWithoutWhitespace() 真的是否需要存储修剪后的文本?还是只需要退货?

将来,为了进行调试,请考虑:

  • 在可能的情况下逐步调试调试器,以检查整个过程中发生的情况。
  • 添加诊断打印输出,例如,在text中打印getNumOfCharacters()的值,以验证它是否符合您的想法。特别考虑到你的假设是问题在这里以及失败的单元测试,这将是一个开始调查的好地方。