我在课堂上研究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编程的新学生。
以下是测试的打印输出:
我的假设是getNumOfCharacters()
在删除空格后返回字符数,但我可能错了。
非常感谢任何帮助/指导。
答案 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()
的值,以验证它是否符合您的想法。特别考虑到你的假设是问题在这里以及失败的单元测试,这将是一个开始调查的好地方。