【发布时间】:2020-07-19 18:32:15
【问题描述】:
假设我有这个代码:
let a () =
failwith "I want to fail!"
然后我有一个 nUnit 测试:
Assert.Throws(fun () -> a() |> ignore)
测试将返回:
方法有非空返回值,但没有预期结果 异常没有堆栈跟踪
如果我有预期的失败情况,我如何测试用例?
有一些关于异常的问题/答案,但我没有找到失败案例的答案。
【问题讨论】:
假设我有这个代码:
let a () =
failwith "I want to fail!"
然后我有一个 nUnit 测试:
Assert.Throws(fun () -> a() |> ignore)
测试将返回:
方法有非空返回值,但没有预期结果 异常没有堆栈跟踪
如果我有预期的失败情况,我如何测试用例?
有一些关于异常的问题/答案,但我没有找到失败案例的答案。
【问题讨论】:
你可以这样做:
Assert.Throws(typeof<System.Exception>, TestDelegate (a)) |> ignore
顺便说一句,您可能想尝试FsUnit 一个基于 NUnit 的更友好的框架。代码如下所示:
(fun () -> a() |> ignore)
|> should throw typeof<System.Exception>
【讨论】:
在
Assert.Throws(fun () -> a() |> ignore)
ignore 适用于您正在测试的功能,而不适用于 Assert.Throws。毫无疑问,您的意图是正确的。
但是,Assert.Throws - 与大多数 nunit 断言不同 - 实际上返回一个值:抛出的异常。你也可以忽略它...
Assert.Throws(fun () -> a() |> ignore) |> ignore
但是,通常情况下,您不想忽略返回。返回它的全部意义在于您可能想要验证消息,查看堆栈跟踪等。如果我不想做任何事情,只是断言抛出了一些异常,我通常会使用
Assert.That(fun () -> a() |> ignore, Throws.Exception);
Assert.That 返回 C# void,即 unit。
[所有这些都是论坛代码,因为我没有在这台机器上安装 F#。 YMMV。]
【讨论】: