Unit testing 需要更好的jUnit测试覆盖率

Unit testing 需要更好的jUnit测试覆盖率,unit-testing,junit,Unit Testing,Junit,各位晚上好 假设您的代码具有以下语句: if (string ends with char 'y') { if ((char before last is not 'e') || (char before last is not 'a')) { return (something awesome); } } 这很简单,我想 测试1: input=“xy”(最后一个字符是y,最后一个字符之前的字符不是e或a) 结果-部分覆盖率 我还错过了哪些测试?如果这是和&&而不是| |,我想

各位晚上好

假设您的代码具有以下语句:

if (string ends with char 'y') {
  if ((char before last is not 'e') || (char before last is not 'a')) {
    return (something awesome);
  }
}
这很简单,我想

测试1: input=“xy”(最后一个字符是y,最后一个字符之前的字符不是e或a)

结果-部分覆盖率

我还错过了哪些测试?如果这是和&&而不是| |,我想测试会容易得多,但是| |让我有点困惑

你能推荐测试2,3,n吗


谢谢你

你也可以编写测试来确保你不会返回太棒的东西

测试应该证明你的预期行为。 不同长度的弦呢

(empty, '1', '2 ', '3  ')
您可能希望将其转换为方法或函数,并将其命名为适当的名称。
然后为这个简单的方法编写测试(在TDD中,您将首先编写它们)。

您还可以编写测试,以确保不会返回令人敬畏的内容

测试应该证明你的预期行为。 不同长度的弦呢

(empty, '1', '2 ', '3  ')
您可能希望将其转换为方法或函数,并将其命名为适当的名称。
然后为这个简单的方法编写测试(在TDD中,您将首先编写它们)。

您希望使用输入“ey”和“ay”测试预期的行为


您可能会发现,您的方法并没有达到您认为的效果。我认为
|
确实让您有点困惑。

您想用输入“ey”和“ay”测试预期的行为


您可能会发现,您的方法并没有达到您认为的效果。我认为
|
确实让你有点困惑。

有不同类型的报道:

    方法级覆盖(C++编译器使用的)
  • 行级覆盖
  • 符号级覆盖(大多数C#覆盖工具都提供此功能)
  • 分支级别的覆盖(许多Java覆盖工具都提供此功能)
我认为你的困惑是因为你在思考符号覆盖率,而你的工具在给你分支覆盖率。区别在于:

符号覆盖率将衡量您是否已到达每个符号(即一组代码,最多一个“;”字符)。下一行包含两个符号:

int i=0;int j=3

分支覆盖率测量每个条件的真值和假值。在您的示例中,列出了4个不同的条件,每个条件都有一个真分支和一个假分支。为了全面测试每个分支,您需要针对以下每个条件进行测试:

  • 字符串以字符y结尾,最后一个字符之前的字符是e
  • 字符串以char y结尾,char before last是一个
  • 字符串以char y结尾,char before last既不是a也不是e
  • 字符串不以字符y结尾

使用您编写的代码,您可能会遇到一些意想不到的事情。不管字符串是否以y结尾,你都会得到一些很棒的东西。如果字符串以“ey”结尾,则它不是以“ay”结尾。如果这两个条件中的任何一个是真的,你就会得到一些很棒的东西。编写测试并亲自查看。

有不同类型的覆盖范围:

    方法级覆盖(C++编译器使用的)
  • 行级覆盖
  • 符号级覆盖(大多数C#覆盖工具都提供此功能)
  • 分支级别的覆盖(许多Java覆盖工具都提供此功能)
我认为你的困惑是因为你在思考符号覆盖率,而你的工具在给你分支覆盖率。区别在于:

符号覆盖率将衡量您是否已到达每个符号(即一组代码,最多一个“;”字符)。下一行包含两个符号:

int i=0;int j=3

分支覆盖率测量每个条件的真值和假值。在您的示例中,列出了4个不同的条件,每个条件都有一个真分支和一个假分支。为了全面测试每个分支,您需要针对以下每个条件进行测试:

  • 字符串以字符y结尾,最后一个字符之前的字符是e
  • 字符串以char y结尾,char before last是一个
  • 字符串以char y结尾,char before last既不是a也不是e
  • 字符串不以字符y结尾
使用您编写的代码,您可能会遇到一些意想不到的事情。不管字符串是否以y结尾,你都会得到一些很棒的东西。如果字符串以“ey”结尾,则它不是以“ay”结尾。如果这两个条件中的任何一个是真的,你就会得到一些很棒的东西。编写测试并亲自查看