Член модуля 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()
Другие вопросы по тегам