錯誤的直接原因是,你命名空間名稱之後漏掉{
:
namespace fizzbuzz { // <- this "{"
public class FizzBuzz {
...
}
} // <- and this "}"
但是即使你修改這個錯字,你將面對另一一些(你不能創建一個靜態的實例類,FizzBuzz
不需要構造函數等);讓我們從測試開始,說這個人:
[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();
}
,以此類推,直到所有的測試都通過了。
請把錯誤*放在問題*中。我還強烈建議你學習數據驅動的測試 - 代碼在每個測試中都是一樣的,所以你可以使用'[TestCase(...)]'使其更好。 –
@DmitryBychenko:我不明白爲什麼,說實話... –
我相信這個問題可能只是在第二個文件中的命名空間聲明之後缺少'{'。它當然不會覺得這是一個真正的混亂或特定於nunit的錯誤。 –