Is it valid to have unit tests with only an assert statement?

So, i'm new to unit testing, and even more so to test first development. Is it valid for me to have just a single assert.isTrue statement in my unit test where I pass in my method and a valid parameter, and compare it to the known good answer?

Method

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

Test

[TestMethod()]
    public void TestRemoveDash()
    {
        Assert.IsTrue(RemoveDash("50-00-0")=="50000");
    }
6
задан Jesse McCulloch 16 August 2010 в 22:33
поделиться

4 ответа

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

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

10
ответ дан 8 December 2019 в 03:38
поделиться

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

[TestMethod()]
public void TestRemoveDash()
{
    string expected = "50000";
    string actual = RemoveDash("50-00-0");
    Assert.AreEqual(expected,actual);
}
10
ответ дан 8 December 2019 в 03:38
поделиться

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

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

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

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

6
ответ дан 8 December 2019 в 03:38
поделиться

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

2
ответ дан 8 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: