Ваша проблема в том, что вы пытаетесь перевести программу C # на дословно F # и ожидаете, что она будет выглядеть «красиво», не понимая, что исходная программа C # уже полна специфических для C # трюков, которые существуют, чтобы она выглядела"отлично".Одним из примеров является базовый класс.Почему существует базовый класс?Это что-то представляет?Нет, это не так: это делается с единственной целью - избегать имени класса при вызове этих функций - т.е. вы пишете Assert
вместо SomeHelper.Assert
.Это связано с тем, что в C # у вас не может быть автономных функций.
Но в F # вы можете!
let assrt x = NUnit.Framework.Assert.That(x)
let assrtWith x msg = NUnit.Framework.Assert.That(x, msg)
[<TestFixture>]
type SaleRepositoryTest () =
[<Test>]
member self.``test something``() =
let x = 1
assrt (x=2)
assrtWith (x=2) "x is not 2"
(Обратите внимание, что вы не можете использоватьname assert
, потому что это ключевое слово)
Также обратите внимание, что обычно классы не нужны .Тот факт, что в C # вы ничего не можете сделать без них, является гигантской ошибкой, которая проистекает из Java-дизайна, что было неправильным пониманием ОО.
Вы можете иметь отдельно стоящие функции.Если я правильно помню, NUnit должен уметь обнаруживать такие тесты очень хорошо (хотя я не могу проверить прямо сейчас):
let [<Test>] ``test something``() =
let x = 1
assrt (x=2)
assrtWith (x=2) "x is not 2"
Наконец, я настоятельно рекомендую вам рассмотреть FsUnit
.Он может связываться с NUnit (если вы заблокированы) и предоставляет хорошую библиотеку F # -идиоматических утверждений.