Должны ли тесты свойств выполняться с модульными тестами при использовании методологии RGR?

Должны ли тесты свойств выполняться с модульными тестами при использовании методологии RGR?

RGR: Красный -> Зеленый -> Рефакторинг

Я заметил, что модульный тест, который у меня есть, выполняется за 18 мс.

Однако мой тест свойства для того же метода занимает 215 мс.

module Tests.Units

open FsUnit
open NUnit.Framework
open NUnit.Core.Extensibility

open FsCheck.NUnit
open FsCheck.NUnit.Addin
open FsCheck

let add x y = (x + y)

let commutativeProperty x y = 
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

[<Test>]
let ``When I add two numbers, the result should not depend on parameter order``()=
    Check.Quick commutativeProperty

[<Test>]
let ``add two numbers`` () =
    add 2 3 |> should equal (5)

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

Кроме того, это всего лишь один простой тест свойства.

Каков эффективный метод для запуска тестов свойств?

Просто регистрация?

1 ответ

Решение

При настройках по умолчанию каждое свойство FsCheck выполняется 100 раз, поэтому неудивительно, что оно медленнее. Заметьте, однако, что это не в 100 раз медленнее.

Я часто использую процесс Red/Green/Refactor при написании тестов свойств (для целевой функции) и нахожу, что он работает хорошо.

Это медленнее, чем при выполнении TDD в C# (также потому, что компилятор F# медленнее, чем компилятор C#). С другой стороны, система типов F# гораздо более выразительна, поэтому я также обнаружил, что больше полагаюсь на систему типов, чем в C#. Это означает, что мне нужно писать меньше тестов.

В общем, я считаю, что комбинация F# и FsCheck - чистая победа над C# и простое модульное тестирование.

Другие вопросы по тегам