覆盖在编写单元测试用例时返回Unit的方法

时间:2016-04-27 07:21:29

标签: scala unit-testing mockito

我正在使用MockitoSugar编写单元测试用例。

以下是我的示例代码:

class EmployeeRepo {

  def addEmplyees(emp:Employee): Long = {
    //logic
    val res1 = sendReport
    val res2 = sendNotification
    //logic
  }

  def sendReport:Boolean={
    //logic
  }

  def sendNotification:Unit={
    //logic
  }
}

示例测试用例:

class TestEmployeeRepo extends WordSpec with MockitoSugar with ScalaFutures {
  "TestEmployeeRepo" must {
    "add employee" in {
      //mock statements
      val result = MockEmployeeRepo.addEmplyees(emp)
      //assert statements
    }
  }
} 

object MockEmployeeRepo extends EmployeeRepo {
  override def sendReport:Boolean = true   
  override def sendNotification:Unit = //needs unit
}

在上面的代码中,我试图用必要的模拟来测试addEmployee方法。因此,在覆盖实际返回sendNotification的{​​{1}}时,我不确定应该如何返回Unit

我试过这两种方式:

Unit

工作正常,但请建议我遵循正确的方式以及override def sendNotification:Unit = println("") override def sendNotification:Unit = Unit 应该有什么。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以返回空块或单位()的文字符号(也就是空元组)

override def sendNotification:Unit = {}
override def sendNotification:Unit = ()

如下所示,它们都代表文字()

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> showRaw(reify(()))
res0: String = Expr(Literal(Constant(())))

scala> showRaw(reify({}))
res1: String = Expr(Literal(Constant(())))

根据Łukasz的评论,有一点不同:虽然()实际上代表Unit类型的单例,但空块被设置为只有一个块内部包含()

更具体地说,编译器会自动将()放在任何必须评估为Unit的块的末尾。你已经注意到了这一点:

override def sendNotification:Unit = println("")

答案 1 :(得分:1)

您可以使用fit = ClustOfVar::hclustvar(X.quanti = mtcars) ggdendro::ggdendrogram(as.dendrogram(fit),rotate = TRUE) ,这是单位类型的文字值。

()