FizzBu​​zz游戏涉及C $

时间:2016-03-04 06:56:19

标签: c# nunit fizzbuzz

以下错误是:

错误和失败: 1)测试失败:fizzbuzz.FizzBu​​zzTest.TestInputFifteen      预期字符串长度为8但为4.字符串在索引0处不同。   预期:" FizzBu​​zz"   但是:" Buzz"   ----------- ^

在fizzbuzz.FizzBu​​zzTest.TestInputFifteen()[0x00000]中:0

2)测试失败:fizzbuzz.FizzBu​​zzTest.TestInputOneHundredAndFive      预期字符串长度为8但为4.字符串在索引0处不同。   预期:" FizzBu​​zz"   但是:" Buzz"   ----------- ^

在fizzbuzz.FizzBu​​zzTest.TestInputOneHundredAndFive()[0x00000]中:0

1 个答案:

答案 0 :(得分:0)

错误的直接原因是您在命名空间名称后省略了{

  namespace fizzbuzz { // <- this "{"
    public class FizzBuzz {    
      ...
    }
  } // <- and this "}"

然而即使你修改了这个错字,你也要面对另一个错误(你不能创建一个静态类的实例,FizzBuzz没有&#39; t必需的构造函数等);让从测试开始,比如说这个:

[Test]
public void TestInputOneHundred() {
    FizzBuzz fizzbuzz = new FizzBuzz(100);
    Assert.AreEqual("Buzz", fizzbuzz.ToString());
}

您正在创建FizzBuzz isntance,然后致电ToString()。所以你必须实现这样的东西:

   namespace fizzbuzz { // <- do not forget "{"
      // Not static! You (== your test) want to create instances
      public class FizzBuzz {  
        // create, passing int (exactly as test wants)
        public FizzBuzz(int value) {
          Value = value;
        }

        // ToString will want the value 
        public int Value {get; set;}

        // ToString to call in the test
        public override ToString() {
          if (Value % 5 == 0)  
            return "Buzz";

          return Value.ToString(); 
        }
      }
   }

测试通过了。运行另一个,例如

   [Test]
    public void TestInputThree() {
        FizzBuzz fizzbuzz = new FizzBuzz(3);
        Assert.AreEqual("Fizz", fizzbuzz.ToString());
    }

要传递此内容,您必须将ToString()修改为

public override ToString() {
  if (Value % 5 == 0)  
    return "Buzz";
  else if (Value % 3 == 0) // for the 2nd test  
    return "Fizz"; 

  return Value.ToString(); 
}

依此类推,直到所有测试都通过。