VB.NET и NUnit - TDD

Я изучаю TDD с VB.NET и NUnit. Я хочу знать то, что является лучшей вещью сделать: Используйте много из, Утверждают методы в методе тестирования или используют утверждение на метод?

Это - мой код.Спасибо.

Imports NUnit.Framework

<TestFixture()> _
Public Class CalculatorTest
<Test()> _
Public Sub TestAdd()
    Dim calculator As Calculator = New Calculator()

    Assert.AreEqual(2, calculator.sum(1, 1))
    Assert.AreNotEqual(3, calculator.sum(2, 2))
    Assert.AreEqual(-1, calculator.sum(0, -1))
        Assert.AreNotEqual(3, calculator.sum(1, 1))
    End Sub
End Class
5
задан Thomas 28 June 2010 в 12:29
поделиться

3 ответа

Лучше всего тестировать по одному. Используйте столько утверждений, сколько необходимо, чтобы проверить это одно, но обычно только одно. Множественные утверждения могут быть признаком того, что вы тестируете более одного объекта одновременно, но, на мой взгляд, это не жесткое правило. Лучшее руководство заключается в том, что вы не хотите создавать зависимости в своих тестах между независимыми концепциями.

В вашем примере вы фактически тестируете 4 объекта, хотя на самом деле вам, вероятно, понадобятся только два из них, поскольку они охватывают одну и ту же область. Я предлагаю проверить, что происходит, когда вы складываете два положительных числа, два отрицательных числа, а также отрицательное и положительное с отрицательным и положительным результатами. Затем я подумал о математических свойствах, тестовой коммутативности и аддитивном тождестве (ноль). Наконец, я бы протестировал граничные условия - положительное и отрицательное переполнение и т. Д. Обратите внимание, это может быть или не быть исчерпывающим, т.е. я думаю, что я рассмотрел основы, но я не слишком стараюсь, чтобы быть исчерпывающим ; Я просто хочу проиллюстрировать, как вы подумаете о том, какие тесты писать, и, да, я бы сделал каждый из этих отдельных тестов с одним утверждением.

Для чего-то более сложного у вас может быть более одного утверждения, которое проверяет одно и то же - например, вы можете проверить, правильно ли вставлена ​​строка в БД с заданным набором входных данных. Я думаю, что вполне приемлемо проверить правильность значений всех столбцов в одном тесте, а не проверять каждое свойство по отдельности.Другие могут отличаться, но я не думаю, что в этом случае вы создаете какие-либо зависимости, проверяя, что все свойства имеют свои правильные значения, потому что вставка является атомарным действием.

7
ответ дан 18 December 2019 в 16:35
поделиться

Общепринятая «Лучшая практика» - одно утверждение на тест. (По словам Роя Ошерова)

Однако этот конкретный тест может быть выполнен немного проще с помощью NUnit, используя TestCases:

<Test()> _
<TestCase(1, 1, 2)> _
<TestCase(1,-1, 0)> _
<TestCase(0,-1,-1)> _
Public Sub Calculator_Add_ReturnsExpectedResult(Integer a, Integer b, Integer expected)
    Dim calculator As Calculator = New Calculator()

    Assert.AreEqual(expected, calculator.sum(a, b))
End Class

Также обратите внимание на именование, которое я использовал там, чтобы уточнить, что именно тестирует тест.

Принцип, лежащий в основе практики «Одно утверждение на тест», заключается в том, что вы хотите, чтобы неудачный тест означал что-то очень конкретное. То есть каждый тест должен сказать вам, работает ли какая-то конкретная вещь.

5
ответ дан 18 December 2019 в 16:35
поделиться

Это интересная дискуссия, которая может сводиться к вопросу стиля. Мне нравится мнение Роя Ошерова о том, что у вас должно быть только одно утверждение на каждый модульный тест.

Прочтите его подробное обсуждение этого вопроса здесь .

Также проверьте это .

0
ответ дан 18 December 2019 в 16:35
поделиться
Другие вопросы по тегам:

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