Я изучаю 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
Лучше всего тестировать по одному. Используйте столько утверждений, сколько необходимо, чтобы проверить это одно, но обычно только одно. Множественные утверждения могут быть признаком того, что вы тестируете более одного объекта одновременно, но, на мой взгляд, это не жесткое правило. Лучшее руководство заключается в том, что вы не хотите создавать зависимости в своих тестах между независимыми концепциями.
В вашем примере вы фактически тестируете 4 объекта, хотя на самом деле вам, вероятно, понадобятся только два из них, поскольку они охватывают одну и ту же область. Я предлагаю проверить, что происходит, когда вы складываете два положительных числа, два отрицательных числа, а также отрицательное и положительное с отрицательным и положительным результатами. Затем я подумал о математических свойствах, тестовой коммутативности и аддитивном тождестве (ноль). Наконец, я бы протестировал граничные условия - положительное и отрицательное переполнение и т. Д. Обратите внимание, это может быть или не быть исчерпывающим, т.е. я думаю, что я рассмотрел основы, но я не слишком стараюсь, чтобы быть исчерпывающим ; Я просто хочу проиллюстрировать, как вы подумаете о том, какие тесты писать, и, да, я бы сделал каждый из этих отдельных тестов с одним утверждением.
Для чего-то более сложного у вас может быть более одного утверждения, которое проверяет одно и то же - например, вы можете проверить, правильно ли вставлена строка в БД с заданным набором входных данных. Я думаю, что вполне приемлемо проверить правильность значений всех столбцов в одном тесте, а не проверять каждое свойство по отдельности.Другие могут отличаться, но я не думаю, что в этом случае вы создаете какие-либо зависимости, проверяя, что все свойства имеют свои правильные значения, потому что вставка является атомарным действием.
Общепринятая «Лучшая практика» - одно утверждение на тест. (По словам Роя Ошерова)
Однако этот конкретный тест может быть выполнен немного проще с помощью 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
Также обратите внимание на именование, которое я использовал там, чтобы уточнить, что именно тестирует тест.
Принцип, лежащий в основе практики «Одно утверждение на тест», заключается в том, что вы хотите, чтобы неудачный тест означал что-то очень конкретное. То есть каждый тест должен сказать вам, работает ли какая-то конкретная вещь.
Это интересная дискуссия, которая может сводиться к вопросу стиля. Мне нравится мнение Роя Ошерова о том, что у вас должно быть только одно утверждение на каждый модульный тест.
Прочтите его подробное обсуждение этого вопроса здесь .
Также проверьте это .