好的,好的 - 我知道这是一个坏主意。然而,在一个非常具体的背景下 - 在我的测试用例中,我只是期望某个结果,而其他任何东西都会以任何方式出错。并且进行模式匹配只会模糊我的测试代码。
这是一个例子
type Result =
| Success of int * int
| Error of String
let someFunc x : Result = // implementation not important here
// and then later in my test code
[<Test>]
member me.``Some Cool Test Method``() =
let (Success x, y) = someFunc "Foo"
equals x 1
equals y 2
关于如何使其更加愉快和编译友好的任何想法?
答案 0 :(得分:6)
你为什么不这样写测试?
[<Test>]
member me.``Some Cool Test Method``() =
let actual = someFunc "Foo"
let expected = Success(1, 2)
equals expected actual
这不会产生任何您需要压制的警告。
答案 1 :(得分:5)
您可以通过在不完整的模式匹配之前的某处插入此行来禁用警告:
#nowarn "0025"
我之前也使用过它来进行一些快速测试,很可能是你描述的场景。
另一个可能是你通过进行模式匹配引用的选项是使用通配符_
捕获所有其他情况并抛出错误:
[<Test>]
member me.``Some Cool Test Method``() =
match someFunc "Foo" with
| (Success x, y) ->
equals x 1
equals y 2
| _ -> failwith "unexpected value"
然后编译器会开心,如果你知道它永远不会到达那里,你就不会再进一步处理这个错误,因为你知道它永远不会被抛出。