日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3.1 使用ZIO测试,写一些简单的程序

發布時間:2024/3/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.1 使用ZIO测试,写一些简单的程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3.1 使用ZIO測試,寫一些簡單的程序

解決方案是ZIO Test,它是一個將effect視為第一類值并利用ZIO的全部功能的測試庫。
要開始使用ZIO測試,請首先將其添加為依賴項。

libraryDependencies ++= Seq("dev.zio" %% "zio-test" % zioVerzion "dev.zio" %% "zio-test-sbt" % zioVersion, )

在這里,我們可以通過擴展DefaultRunnableSpec并實現其spec方法。

import zio.test._import zio.test.Assertion._object ExampleSpec extends DefaultRunnableSpec {def spec = suite("ExampleSpec")(test("addition works") {assert(1 + 1)(equalTo(2))})}

到目前為止,這看起來與其他測試框架沒有什么不同。每個測試集合都表示為一個spec,可以是一個測試,也可以是包含一個或多個其他spec的suite。
這樣,spec就是一棵像樹一樣的數據結構,可以支持任意級別的suite和test,從而為組織測試提供了極大的靈活性。

我們使用assert操作編寫測試,該運算符首先獲取一個要聲明的值,然后取一個我們希望對該值保留的聲明。
在這里,我們使用簡單的equalTo斷言,該斷言只是期望值等于equalTo的參數,但是正如我們將在下一節中看到的那樣,我們可以使用各種其他斷言來表達更復雜的期望。
讓我們看看如何測試ZIO.succeed是否成功獲得了我們之前努力的期望值。

object ExampleSpec extends DefaultRunnableSpec {def spec = suite("ExampleSpec")(testM("ZIO.succeed succeeds with specified value") {assertM(ZIO.succeed(1 + 1))(equalTo(2))})}

不知道你是否發現了其中的不同?
除了用ZIO.succeed(1+1)替換1+1外,我們所做的唯一更改是用testM替換了test并用assertM斷言了。
用testM替換test將告訴測試框架該測試將返回ZIO效果。測試框架將自動運行test以及spec中的所有其他測試,并以跨平臺一致的方式報告結果。
類似地,用assertM替換assert表示該斷言的左側將是ZIO
effect,并且測試框架應在左側運行并將其結果與右側的期望進行比較。assertM在這里并沒有什么神奇的。
實際上,我們可以使用map或for理解將assertM替換為assert。

object ExampleSpec extends DefaultRunnableSpec {def spec = suite("ExampleSpec")(testM("testing an effect using map operator") {ZIO.succeed(1 + 1).map(n => assert(n)(equalTo(2)))},testM("testing an effect using a for comprehension") {for {n <- ZIO.succeed(1 + 1)} yield assert(n)(equalTo(2))})}

編寫此測試的所有三種方式都是等效的。通常,我們發現在整個測試適合時,單行測試,使用assertM最具可讀性.其他的用for推導比較合適。
您可以選擇適合自己的樣式。您也可以使用&&和||使用邏輯與邏輯或,或使用組合多個assert語句否定斷言。

object ExampleSpec extends DefaultRunnableSpec {def spec = suite("ExampleSpec")(testM("and") {for {x <- ZIO.succeed(1) y <- ZIO.succeed(2)} yield assert(x)(equalTo(1)) && assert(y)(equalTo(2))})}

總結

以上是生活随笔為你收集整理的3.1 使用ZIO测试,写一些简单的程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。