【问题标题】:Junit Testing for sum of string method字符串总和方法的 Junit 测试
【发布时间】:2016-01-16 11:56:33
【问题描述】:

谁能给我两个java中这个函数的失败测试用例 有指定的输入和预期的结果?

public int sumOfString(String numbers){    
  if(numbers == null) throw new IllegalArgumentException(); 
  String[] parts = numbers.split(",");
  int sum = 0; 
  for (String string : parts)
  {
    sum += Integer.parseInt(string); 
  } 
  return sum; 
}

这是我尝试过的

public void testSumOfString() {
    String numbers = "13,4,,5";
    Engine instance = new Engine();
    int expResult = 22;
    int result = instance.sumOfString(numbers);
    assertEquals(expResult, result);
}
public void testSumOfString2() {
    String numbers = "13,A,5";
    Engine instance = new Engine();
    int expResult = 13 + 65 + 5;
    int result = instance.sumOfString(numbers);
    assertEquals(expResult, result);
}

【问题讨论】:

  • 我可以;但是我为什么要把空闲时间花在你的作业上呢?
  • 您要求我们为您提供方法失败但方法是唯一描述预期行为的测试用例。抱歉,这是一项不可能完成的任务。
  • 想想你的方法会失败的超过 2 种情况是相当简单的......我投票决定从 SO 中删除这个问题,因为它不尊重它在这里的工作方式。我们不是你的作业猴子:我们在需要帮助时提供帮助; SO 不是一项无需付出任何努力就能为您的家庭作业找到确切答案的服务。
  • 这不是我的作业,我试图找到两个小时前导致逻辑错误的两个故障,但仍然没有找到任何真正的解决方案
  • 我使用 Junit 发现了两个错误的测试用例,但这些测试用例会导致错误而不是意外的结果

标签: java unit-testing junit


【解决方案1】:

您要么创建包含代码的对象,要么将类设为静态以用于测试目的。

//There are your two test cases
//One is when your code tries to accept an empty string
//One is when you're trying to sum alpha characters.
public void testSumOfString() {
       Assert.Equals(new IllegalArgumentException(),MyObject.sumOfString("")); // MyObject is your class
       // the string that I gave to the method can make the method work because it's empty
    Assert.Equals(new NumberFormatException(), MyObject.sumOfString("Assadsdfcdsvc"); 
    }

您应该更新代码以确保方法接收的字符串完全由整数值组成。一个好的开始是使用以下行更新您的代码

  //Update your code with the following 
if(str == null || str.isEmpty()) throw new IllegalArgumentException();

【讨论】:

  • 我发送 {"0","A","3"} 怎么样,这会导致错误,我可以将这个失败测试用例报告给我们的 Java 开发人员吗?
  • 我的预期结果:65+3+0=68
  • 在那种情况下,我真的不明白你会如何期望这样的结果..除非你试图查看字符串中每个字符的 ASCII 值。不仅如此,代码只接受字符串。您正在发送一系列字符,这没关系。但是您可能应该考虑将方法转换为接收 char 数组,然后在方法内部,将数组转换为字符串,然后尝试获取每个 char 的 ASCII 值,最后求和。
  • 我明白你的意思,但真正的目的是试图理解测试中的最佳软件工程实践,当我说我的测试用例是失败或成功时,(运行时后的错误原因)和意外结果来自错误的用户对函数的输入
  • 最好的做法是想象可能出现的问题并对其进行测试,例如我已经说过并在回复中给您的内容。在使用 JUnit javaworld.com/article/2076265/testing-debugging/… 时,请参阅此文章以了解最佳实践
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多