2010-08-16 3 views
6

Итак, я новичок в модульном тестировании, и тем более для тестирования первой разработки. Действительно ли у меня есть только одно утверждение assert.isTrue в моем модульном тесте, в котором я передаю свой метод и действительный параметр, и сравниваю его с известным хорошим ответом?Действительно ли имеет модульные тесты только с утверждением?

Метод

public static string RemoveDash(string myNumber) 
    { 
     string cleanNumber = myNumber.Replace("-",""); 
     return cleanNumber; 
    } 

Тест

[TestMethod()] 
    public void TestRemoveDash() 
    { 
     Assert.IsTrue(RemoveDash("50-00-0")=="50000"); 
    } 

ответ

10

Это довольно справедливо, если он проверяет функциональность вашего метода, это очень похоже делать.

Возможно, вместо этого используйте Equals вместо этого, но это не имеет значения. Кроме того, я знаю, что это тестовый пример, но всегда проверяйте случаи, когда ввод не является ожидаемым, а также любыми другими действительными формами, которые могут возникнуть (это может быть один и тот же метод тестирования или другой по вашему желанию)

+1

Еще одна причина, чтобы предпочесть Assert.Equals в этом случае заключается в том, что вы получите полезную обратную связь, когда она терпит неудачу, и не нужно думать так много, чтобы отлаживать. (т. е. что-то вроде «ожидаемого» 50000, но было «5000-0» вместо «ожидаемого true, но было ложным»). Cheers – Berryl

2

Это кажется совершенно верным - однако почему бы не включить несколько других тестов в этот метод по тем же линиям, но тестирование, например, RemoveDash("-") == "" и RemoveDash("-5") == "5" и т. Д.?

+0

Спасибо за вход Will. Это простое изменение для реализации и не забудьте сделать в будущем. –

10

Тестеры иногда читают наши тесты, поэтому я стараюсь сделать их максимально возможными. Я предпочел бы использовать следующее, а не одного Assert:

[TestMethod()] 
public void TestRemoveDash() 
{ 
    string expected = "50000"; 
    string actual = RemoveDash("50-00-0"); 
    Assert.AreEqual(expected,actual); 
} 
+0

Спасибо флетчер. Я вижу, как это облегчает чтение. –

+1

+1 Я бы не использовал локальные переменные для чего-то такого короткого, но AssertEquals() или эквивалент обычно полезен, так как он (обычно) печатает оба значения при неудаче теста, поэтому легче понять, в чем проблема. –

6

Единственный комментарий является использование Assert.AreEqual вместо Assert.IsTrue:

Assert.IsAreEqual("50000", RemoveDash("50-00-0")); 

Причиной этого является то, что если тест провалить сообщение об ошибке, которое вы получаете, более подробно описывает, что должно было произойти, и что на самом деле произошло. Сообщение, которое гласит: «Ожидаемое значение < 50000>, но на самом деле было < 50-00-0>« намного лучше, чем «Ожидаемое значение должно быть истинным, но было ложным».

Как правило, всякий раз, когда вы оказываетесь желающими использовать Assert.IsTrue, пройти через Assert метод и посмотреть, если есть лучший способ, чтобы проверить ваши ожидания (например, Assert.IsInstanceOfType, Assert.IsNotNull, и т.д.).

+0

Спасибо за дополнительную информацию Игорь! –

Смежные вопросы