C#:单元测试带有数字的双数回文

C#:单元测试带有数字的双数回文,c#,palindrome,C#,Palindrome,我被要求使用预先制作的回文代码编写一个测试程序。我们被告知不要修复代码,而是通过测试发现问题。我花了几个小时盯着这个,我只是需要方向。我发现很多关于测试字符串回文和数字回文的东西,没有一个是使用数字的。也许这比我自己做的更容易,但是链接或指导在任何方面的帮助都是非常感谢的 public static Boolean isPalindrome(double num) { if (num >= 10000 && num < 100000)

我被要求使用预先制作的回文代码编写一个测试程序。我们被告知不要修复代码,而是通过测试发现问题。我花了几个小时盯着这个,我只是需要方向。我发现很多关于测试字符串回文和数字回文的东西,没有一个是使用数字的。也许这比我自己做的更容易,但是链接或指导在任何方面的帮助都是非常感谢的

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;
        }
    }


}
public静态布尔值isAlindrome(双数值)
{
如果(数量>=10000&&num<100000)
{
双oldNum=num;
double FirstDig=num%10;
num=num-(num%10);
双倍秒数=num%100;
num=num-(num%100);
双三分之一=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;
二次挖掘=二次挖掘/100;
ThirdDig=ThirdDig/1000;
第四次挖掘=第四次挖掘/10000;
第五次挖掘=第五次挖掘/100000;
双翻转数=第一次挖掘+第二次挖掘+第三次挖掘+第四次挖掘+第五次挖掘;
flippedNum=flippedNum*100000;
如果(flippedNum==oldNum)
{
返回true;
}
其他的
{
返回false;
}
}
其他的
{
返回false;
}
}
}

编写测试时,方法的实现应该无关紧要。相反,您需要知道给定输入的预期输出。我建议列一个清单,然后对你能想到的每个输入进行测试。从简单开始,你会有更多的想法,输入会更复杂。

在编写测试时,方法的实现应该不重要。相反,您需要知道给定输入的预期输出。我建议列一个清单,然后对你能想到的每个输入进行测试。从简单开始,你会有更多的想法,输入也会更复杂。

编写一个单元测试,它接受一个数字,将它传递给这个函数,并将预期结果与实际结果进行比较。有了NUnit3,它可能看起来像这样:

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

编写一个单元测试,获取一个数字,将其传递给此函数,并将预期结果与实际结果进行比较。有了NUnit3,它可能看起来像这样:

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

有什么理由不使用整数吗?@Phil1970嘘……这就是OP应该找到的bug。或者至少是其中的一个。将值转换为字符串,然后验证它是否是回文将非常简单。@Phil1970阅读问题了吗?任意范围没有意义。如果在该代码中尝试9449,它将返回false。如果代码处理的是全范围,它可能会抛出一个异常。有什么理由不使用整数吗?@Phil1970 Shh…这就是OP应该找到的bug。或者至少是其中的一个。将值转换为字符串,然后验证它是否是回文将非常简单。@Phil1970阅读问题了吗?任意范围没有意义。如果在该代码中尝试9449,它将返回false。如果代码处理的范围是完整的,它可能会抛出一个异常。