Допустимо ли иметь модульные тесты только с утверждением assert? - PullRequest
6 голосов
/ 17 августа 2010

Итак, я новичок в модульном тестировании, и тем более для тестирования первой разработки.Допустимо ли для меня иметь только один оператор 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");
    }

Ответы [ 4 ]

10 голосов
/ 17 августа 2010

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

[TestMethod()]
public void TestRemoveDash()
{
    string expected = "50000";
    string actual = RemoveDash("50-00-0");
    Assert.AreEqual(expected,actual);
}
10 голосов
/ 17 августа 2010

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

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

6 голосов
/ 17 августа 2010

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

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

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

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

2 голосов
/ 17 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...