如何测试scalaz IO?

吉达

考虑以下IO:

val io = (for{
      userChoice <- getChar
    } yield if (userChoice == 'y') putStr("yes") else putStr("no")).flatMap(identity)

我正在尝试像这样测试它:

    val input: InputStream = new ByteArrayInputStream(Array('n', 'n')) // Not sure why I need two of them...
    System.setIn(input)
    val output = new ByteArrayOutputStream()
    System.setOut(new java.io.PrintStream(output))
    io.unsafePerformIO()
    System.setIn(new FileInputStream(FileDescriptor.in))
    System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)))
    output.toString ==== "no"

我正在sbt中使用specs2进行测试。我第一次运行测试,它通过了。第二次失败,Console has reached end of input并且sbt处于怪异状态,我需要杀死它。

我想可能与sbt有某种形式的交互,但我不知道它到底是什么。有没有更好的方法来测试IO?

埃里克

对于这种交互,我认为使用Free monad开发一种“迷你语言”是值得的,并且有2个解释器,一个解释器用于使用IdMonad进行测试,另一个解释器用于使用IOmonad进行生产

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确使用FileUtils IO?

来自分类Dev

drone.io无头测试

来自分类Dev

Locust.io重载测试

来自分类Dev

如何分发socket.io

来自分类Dev

如何查询orchestrate.io

来自分类Dev

Spray.io:无法编译测试规范

来自分类Dev

从scalaz导入`IO`

来自分类Dev

如何在Golang中测试io.writer?

来自分类Dev

如何干净地登录io.stdOutLines并使用scalaz.stream.tcp服务器响应客户端

来自分类Dev

如何测试scalaz IO?

来自分类Dev

使用IO monad的Haskell单元测试

来自分类Dev

如何在模拟器中测试Branch.io?

来自分类Dev

使用ExUnit测试时,如何伪造IO输入?

来自分类Dev

测试从生成的过程中捕获的IO

来自分类Dev

socket.io如何工作

来自分类Dev

与猫效应的IO单子的单元测试

来自分类Dev

artillery.io负载测试如何分布在多个内核上

来自分类Dev

如何为Y.io编写适当的测试

来自分类Dev

如何监视磁盘io?

来自分类Dev

Scala Spray.io测试框架

来自分类Dev

如何使用RSpec测试文件IO是否根据时间更改

来自分类Dev

如何中断IO块?

来自分类Dev

IO返回值测试

来自分类Dev

如何使用branch.io测试应用的未发布版本?

来自分类Dev

如何在Android unitTest/AndroidTest中测试文件IO

来自分类Dev

linux测试项目中如何指定目录进行IO测试

来自分类Dev

如何为 outputStream.write IO IOException 编写 junit 测试

来自分类Dev

linux fio IO速度测试混淆结果

来自分类Dev

如何在美味测试中做IO?