Hao*_*Ren 5 scala inputstream mocking
我想为我的main函数编写一个单元测试,其中有一个 readLine()
循环.
我尝试过以下基于java的.我想readLine()
可能需要System.in
作为inputStream
.但它不起作用.ScalaTest在readLine()
等待输入时被阻止.
"readLine" should "work" in {
val in = new ByteArrayInputStream("abc".getBytes)
System.setIn(in)
readLine() === "tester"
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
Maxim 的解决方案实际上对我不起作用(不再?)。因此,为了帮助面临同样问题的其他人:
val in = new ByteArrayInputStream(("abc").getBytes)
Console.withIn(in) {
assert(StdIn.readLine() === "abc")
}
Run Code Online (Sandbox Code Playgroud)
单元测试的正确方法是遵循“端口和适配器”模式。
因此,您应该有一个作为控制台读取器的“端口”的接口,以便您可以在单元测试中模拟它。
此外,您应该进行集成测试,以验证您的“适配器”是否确实适用于真正的控制台。
根据你的问题的标题,我猜你想做一个集成测试。你就快到了。您调用了自 Scala 2.11.0 以来已弃用的已弃用方法。这段代码应该可以工作 -
"readLine" should "work" in {
val in = new ByteArrayInputStream("abc".getBytes)
System.setIn(in)
StdIn.readLine() === "abc"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1507 次 |
最近记录: |