Vorrei verificare che un valore sia un caso particolare di unione discriminata, senza dover controllare anche i dati inclusi. La mia motivazione è di testare solo una cosa con ogni test unitario.Come verificare il caso di un'unione discriminata con FsUnit?
Un esempio è la seguente (le ultime due righe danno errori di compilazione):
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
si può fare in FsUnit?
Sono a conoscenza di this answer ma preferirei non dover scrivere le funzioni di corrispondenza per ciascun caso (nel mio codice reale ce ne sono più di due).
V'è in realtà un modo abbastanza facile da fare questo da C#, ma non funziona in F #. –