Я хотел бы проверить, что значение относится к конкретному случаю размеченного союза, без необходимости также проверять какие-либо включенные данные. Моя мотивация состоит в том, чтобы тестировать только одну вещь с каждым модульным тестом.
Пример такой (последние две строки дают ошибки компиляции):
module MyState
open NUnit.Framework
open FsUnit
type MyState =
| StateOne of int
| StateTwo of int
let increment state =
match state with
| StateOne n when n = 10 -> StateTwo 0
| StateOne n -> StateOne (n + 1)
| StateTwo n -> StateTwo (n + 1)
[<Test>]
let ``incrementing StateOne 10 produces a StateTwo`` ()=
let state = StateOne 10
(increment state) |> should equal (StateTwo 0) // works fine
(increment state) |> should equal (StateTwo _) // I would like to write this...
(increment state) |> should be instanceOfType<StateTwo> // ...or this
Можно ли это сделать в FsUnit?
Мне известен этот ответ, но я бы предпочел не писать соответствующие функции для каждого случая (в моем реальном коде есть намного больше двух).