【问题标题】:New to Java -- Return Unit test failingJava新手——返回单元测试失败
【发布时间】:2016-09-11 18:58:39
【问题描述】:

我正在课堂上编写一个 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() 正在返回删除空格后的字符数,但我可能错了。

任何帮助/指导将不胜感激。

【问题讨论】:

  • 提示:避免链接到外部站点以获取更多信息。并且:只发布相关代码。含义:与其在此处粘贴您的 main 方法,不如发布失败的单元测试的源代码。换句话说:请转到帮助中心并阅读“如何提问”。
  • 你的方法名错了吗?测试说 GetNumOfCharacters(大写 G)
  • @GhostCat 新用户只有 10 个代表才能内联图像。您可以而且应该通过编辑来帮助他们。这里有足够的信息来查看这个问题,并且程序本身足够小,一目了然。这是一个非常明确的问题,恰好包含了我们一直要求人们提供的所有信息。

标签: java unit-testing methods string-length


【解决方案1】:

您的假设是正确的,问题是您将text 替换为剥离 text

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

... 现在getNumOfCharacters() 正在返回 stripped 长度,它不再是例如46.

也就是说,当你在main中点击这一行时:

String modifiedstring = outputWithoutWhitespace();

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

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

这是一个很好的关于如何处理和管理数据的练习,对你来说是一个很好的学习体验。这也很好地展示了单元测试在质量控制中的价值;你应该记住这一课。

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

未来,为了调试,考虑:

  • 在可能的情况下在调试器中单步执行以检查沿途发生的情况。
  • 添加诊断打印输出,例如,在getNumOfCharacters() 中打印text 的值,以验证它是否是您认为的那样。特别是考虑到您假设问题出在此处并且单元测试失败,这将是开始调查的好地方。

【讨论】:

  • 谢谢大家!我认为这可能是 Jason C 和@cricket_007 所说的组合。我将其剥离并尝试仅对 GetNumOfCharacters() 进行强制测试,但仍然无法通过测试。我要休息一下,然后继续前进,但如果我找到解决方案,我会在这里停下来!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多