Chciałbym sprawdzić, czy wartość dotyczy konkretnego przypadku dyskryminowanej unii, bez konieczności sprawdzania żadnych uwzględnionych danych. Moją motywacją jest testowanie tylko jednej rzeczy przy każdym teście jednostkowym.Jak sprawdzić przypadek dyskryminowanej unii z FsUnit?
Przykładem jest następujący (dwie ostatnie linie nadają błędy kompilacji):
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
można to zrobić w FsUnit?
Jestem świadomy this answer, ale wolałbym nie pisać odpowiednich funkcji dla każdego przypadku (w moim prawdziwym kodzie jest więcej niż dwa).
Tu jest rzeczywiście dość łatwy sposób to zrobić z C#, ale to nie działa w F #. –