如何测试scala函数?

时间:2019-05-15 09:10:49

标签: scala function return-value

我开始学习scala,为了学习,我想玩一些功能。但是,我不知道如何使函数返回值出现在控制台上。我正在使用sbt。

我尝试使用return和Console.println,我猜我使用不正确。

例如:

def func(ls: List[Boolean]): Boolean = ls match 
    {
      case Nil => false
      case l::ls => l != func(ls)
    }

如何查看此函数返回的内容?

2 个答案:

答案 0 :(得分:5)

Scastie是Scala的在线交互式游乐场,是一种快速的入门方法。例如,将以下内容粘贴到编辑器中,然后按Save按钮

def func(ls: List[Boolean]): Boolean = ls match {
  case Nil => false
  case l::ls => l != func(ls)
}

func(List(true, false, true))

应评估func并以内联方式显示结果

func(List(true, false, true)) // false: Boolean

也尝试println(func(List(true, false, true)))

测试预期结果而不用打印它的另一种方法是使用这样的断言

assert(func(List(true, false, true)) == false)

要将上述断言转换为真实的单元测试,我们可以像这样从Scala Giter8 template实例化应用程序

sbt new scala/scala-seed.g8

可设置快速运行和测试应用程序所需的所有家具。然后像这样将func添加到src/main/scala/example/Hello.scala

object Hello extends App {
  def func(ls: List[Boolean]): Boolean = ls match {
    case Nil => false
    case l::ls => l != func(ls)
  }
}

像这样将相应的单元测试添加到src/test/scala/example/HelloSpec.scala

class HelloSpec extends FlatSpec with Matchers {
  "func" should "return false on List(true, false, true)" in {
    Hello.func(List(true, false, true)) shouldEqual false
  }

  it should "return false on empty list" in {
    Hello.func(List()) shouldEqual false
  }

  // add further tests here
}

现在执行sbt test应该输出

[info] HelloSpec:
[info] func
[info] - should return false on List(true, false, true)
[info] - should return false on empty list
[info] Run completed in 127 milliseconds.
[info] Total number of tests run: 2
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.

答案 1 :(得分:3)

您可以尝试以下方法:

scala> :paste
// Entering paste mode (ctrl-D to finish)

def func(ls: List[Boolean]): Boolean = ls match
      {
        case Nil => false
        case l::ls => l != func(ls)
      }

// Exiting paste mode, now interpreting.

func: (ls: List[Boolean])Boolean

scala> func(List(true, false, true))
res0: Boolean = false