2016-03-04 66 views
-1

以下錯誤是:

錯誤和故障: 1)測試失敗:fizzbuzz.FizzBu​​zzTest.TestInputFifteen 預期字符串長度8但4.字符串在預期索引0 不同: 「FizzBu​​zz」 但是: 「嗡嗡」 -----------^

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

2)測試失敗: fizzbuzz.FizzBu​​zzTest.TestInputOneHundredAndFive 預期字符串長度8但4.字符串索引爲0 預期不同: 「FizzBu​​zz」 但是: 「嗡嗡」 -----------^

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

+0

請把錯誤*放在問題*中。我還強烈建議你學習數據驅動的測試 - 代碼在每個測試中都是一樣的,所以你可以使用'[TestCase(...)]'使其更好。 –

+0

@DmitryBychenko:我不明白爲什麼,說實話... –

+0

我相信這個問題可能只是在第二個文件中的命名空間聲明之後缺少'{'。它當然不會覺得這是一個真正的混亂或特定於nunit的錯誤。 –

回答

0

錯誤的直接原因是,你命名空間名稱之後漏掉{

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

,以此類推,直到所有的測試都通過了。

+0

他正在收到編譯器錯誤,實際的問題隱藏在評論中。 –

+0

@丹,抱歉打字錯誤,它應該是'公共覆蓋字符串ToString()',因爲'ToString'返回,當然,'String' –

+0

@Dmitry Bychenko所以我得到了最後一個測試,但現在我被卡在「 FizzBu​​zz「作爲輸出 – Dan