我正在使用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("")