作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 F# 中编写异步测试方法?
我引用的是以下code :
[TestMethod]
public async Task CorrectlyFailingTest()
{
await SystemUnderTest.FailAsync();
}
这是我失败的尝试:
[<Test>]
let ``Correctly failing test``() = async {
SystemUnderTest.FailAsync() | Async.RunSynchronously
}
最佳答案
经过一番研究后,发现这比应有的要困难。 https://github.com/nunit/nunit/issues/34
话虽如此,提到了一种解决方法。这看起来有点蹩脚,但是,看起来将任务委托(delegate)外部声明为成员并利用它是一种可行的解决方法。
线程中提到的示例:
open System.Threading.Tasks
open System.Runtime.CompilerServices
let toTask computation : Task = Async.StartAsTask computation :> _
[<Test>]
[<AsyncStateMachine(typeof<Task>)>]
member x.``Test``() = toTask <| async {
do! asyncStuff()
}
还有
open System.Threading.Tasks
open NUnit.Framework
let toAsyncTestDelegate computation =
new AsyncTestDelegate(fun () -> Async.StartAsTask computation :> Task)
[<Test>]
member x.``TestWithNUnit``() =
Assert.ThrowsAsync<InvalidOperationException>(asyncStuff 123 |> toAsyncTestDelegate)
|> ignore
[<Test>]
member x.``TestWithFsUnit``() =
asyncStuff 123
|> toAsyncTestDelegate
|> should throw typeof<InvalidOperationException>
XUnit 也遇到了类似的问题,并且确实提出了解决方案: https://github.com/xunit/xunit/issues/955
所以你应该能够在 xunit 中执行此操作
[<Fact>]
let ``my async test``() =
async {
let! x = someAsyncCall()
AssertOnX
}
很抱歉,如果这不是最令人满意的答案。
关于unit-testing - 如何在 F# 中编写异步单元测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46227709/
我是一名优秀的程序员,十分优秀!