Член модуля F# неинициализирован
Я пишу модульные тесты на F#, используя FsUnit и NUnit, с тестовым адаптером NUnit для VS2015 Ultimate CTP. Я столкнулся со странной проблемой, когда член модуля имеет значение null, и я не ожидал, что это произойдет.
Это проблема кода или способа выполнения тестов?
Я пытался изменить подпись Foo.SpecificFooStrategy.create
в unit -> FooStrategy
(let create = fun () -> ...
) и ссылаясь как Foo.SpecificFooStrategy.create ()
, но это не помогло.
Код
namespace Foo
// FooStrategy.fs
module FooStrategy =
type FooStrategy =
| FooStrategy of A * B
with
member x.A =
match x with
| FooStrategy(a, _) -> a
member x.B =
match x with
| FooStrategy(_, b) -> b
let create a b = FooStrategy(a, b)
// SpecificFooStrategy.fs
module SpecificFooStrategy =
let private a = // ...
let private b = // ...
let create =
FooStrategy.create a b
Тестовое задание
namespace Foo.Tests
[<TestFixture>]
module SpecificFooStrategyTests =
[<Test>]
let ``foo is something`` ()=
let strategy = Foo.SpecificFooStrategy.create
strategy // strategy is null here
|> An.operationWith strategy
|> should equal somethingOrOther
1 ответ
Решение
В коде create
это не функция, а значение.
Это можно исправить, определив его как функцию:
let create() = …
и называя это паренсом:
let strategy = Foo.SpecificFooStrategy.create()