2016-03-04 1 views
-1

Следующая ошибка:

Ошибки и неудачи: 1) Тест Failure: fizzbuzz.FizzBuzzTest.TestInputFifteen Ожидаемая длина строки 8 но 4. Строки различаются по индексу 0. ОЖИДАЕТСЯ: "FizzBuzz" Но было: "Buzz" -----------^

в fizzbuzz.FizzBuzzTest.TestInputFifteen() [0x00000] в: 0

2) Test Failure: fizzbuzz.FizzBuzzTest.TestInputOneHundredAndFive Ожидаемая длина строки 8 но 4. Строки различаются по индексу 0. ОЖИДАЕТСЯ: "FizzBuzz" Но было: "Buzz" -----------^

в fizzbuzz.FizzBuzzTest. TestInputOneHundredAndFive() [0x00000] в: 0

+0

Пожалуйста, укажите ошибки * в вопросе *. Я также настоятельно рекомендую вам узнать о проверенных данными тестах - в каждом тесте код одинаковый, поэтому вы можете просто использовать '[TestCase (...)]', чтобы сделать это лучше. –

+0

@DmitryBychenko: Я не понимаю, почему, если честно ... –

+0

Я считаю, что проблема заключается, вероятно, в простом '' 'после объявления пространства имен во втором файле. Это, конечно, не похоже, что это ошибка, которая действительно является fizzbuzz или nunit-specific. –

ответ

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

@Dan, извините за опечатку, это должно быть 'public override String ToString()', так как 'ToString' возвращает, конечно,' String' –

+0

@Dmitry Bychenko, так что я получил последний тест, но теперь я застрял на " FizzBuzz "в качестве вывода – Dan