val input = "Hello, World!"
val mockConsole = MockConsole.empty.feedLines(input)
val program = for {
_ <- console.putStrLn("Please enter a message:")
message <- console.getStrLn
_ <- console.putStrLn(s"You entered: $message")
} yield ()
val result = program.provideLayer(ZEnv.live ++ (mockConsole >>> Console.live))
assert(result, succeeds)
assert(mockConsole.output, equalTo(Vector("Please enter a message:
", s"You entered: $input
")))
val testClock = TestClock()
val program = for {
_ <- console.putStrLn("Start")
_ <- clock.sleep(1.second)
_ <- console.putStrLn("End")
} yield ()
val result = program.provideLayer(ZEnv.live ++ (testClock >>> Clock.live))
assert(result, succeeds)
assert(testClock.adjust(Duration(1, TimeUnit.SECONDS)).currentTimeMillis(), equalTo(1000L))
assert(testClock.adjust(Duration(2, TimeUnit.SECONDS)).currentTimeMillis(), equalTo(2000L))
val mockFilesystem = MockFilesystem.empty
val program = for {
_ <- filesystem.writeFile("/path/to/file.txt", "Hello, World!")
contents <- filesystem.readFile("/path/to/file.txt")
} yield contents
val result = program.provideLayer(mockFilesystem)
assert(result, equalTo("Hello, World!"))
// build.sbt
libraryDependencies += "dev.zio" %% "zio-test" % "<version>"
libraryDependencies += "dev.zio" %% "zio-test-magnolia" % "<version>"
libraryDependencies += "dev.zio" %% "zio-mock" % "<version>"
scala
import zio._
import zio.test.mock._