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



我正在使用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方法。因此,在覆盖实际返回Unit sendNotification时,我不确定我应该如何返回Unit

我尝试了以下两种方法:

override def sendNotification:Unit = println("")
override def sendNotification:Unit = Unit

工作正常,但请建议我遵循正确的方法以及//needs unit应该有什么。提前谢谢。

您可以使用

() ,这是单位类型的文本值。

override def sendNotification: Unit = ()

您可以返回一个空块或单位()的文字符号(也称为空元组)

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("")

相关内容

  • 没有找到相关文章

最新更新