2016-09-15 38 views
0

我被要求使用预制回文代码编写测试程序。我们被告知不要修复代码,而是使用Test来查找问题。我花了几个小时盯着这个,我只需要方向。我发现了很多测试字符串回文和数字回文的东西,但都没有使用数字。也许这比我自己做起来容易,但是以任何方式提供的链接或指导都是非常值得赞赏的。C#:单元测试带数字的双数回文

public static Boolean isPalindrome(double num) 
    { 
     if (num >= 10000 && num < 100000) 
     { 
      double oldNum = num; 
      double FirstDig = num % 10; 
      num = num - (num % 10); 
      double SecondDig = num % 100; 
      num = num - (num % 100); 
      double ThirdDig = num % 1000; 
      num = num - (num % 1000); 
      double FourthDig = num % 10000; 
      num = num - (num % 10000); 
      double FifthDig = num % 100000; 
      num = num - (num % 100000); 
      FirstDig = FirstDig/10; 
      SecondDig = SecondDig/100; 
      ThirdDig = ThirdDig/1000; 
      FourthDig = FourthDig/10000; 
      FifthDig = FifthDig/100000; 
      double flippedNum = FirstDig + SecondDig + ThirdDig + FourthDig + FifthDig; 
      flippedNum = flippedNum * 100000; 
      if (flippedNum == oldNum) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     else 
     { 
      return false; 
     } 
    } 


} 
+0

有什么理由不使用整数呢? – Phil1970

+0

@ Phil1970嘘......这是OP应该找到的错误。或者至少有一个。 –

+0

将值转换为字符串然后验证它是否是回文将非常简单。 – Phil1970

回答

0

在编写测试时,方法的实现应该没有关系。相反,您需要知道给定输入的预期输出。我建议列出这些列表,然后针对每个可以想到的输入实施测试。从简单开始,随着您的进一步发展,投入会变得更加复杂。

2

编写一个单元测试,接受一个数字,将其传递给此函数,并将预期结果与实际结果进行比较。随着NUnit3,它看起来是这样的:

[TestCase(101d, true)] 
[TestCase(100d, false)] 
public void SutConfirmsIfNumberIsPalindrome(double input, bool expectedOutcome) { 
    var outcome = isPalindrome(input); 
    Assert.True(outcome == expectedOutcome); 
}