Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 测试Scala对象_Testing_Scala - Fatal编程技术网

Testing 测试Scala对象

Testing 测试Scala对象,testing,scala,Testing,Scala,与Java中的静态测试相比,Scala的对象可测试性如何比较?有陷阱吗 谢谢。一般来说,使用“object”类声明的Scala单例实例比Java静态方法更易于测试,主要是因为它们能够实现traits和扩展其他类,因此适合典型的面向对象测试范式 现在,如果您碰巧做了一些不幸的事情,比如在单例对象中存储可变状态,那么您将遇到与测试Java单例时相同的问题。当然,有一个简单的解决方案:永远不要在对象体中使用“var”。这是“永远不要使用var,period”这一高级建议的一个微不足道的专门化。与Jav

与Java中的静态测试相比,Scala的对象可测试性如何比较?有陷阱吗


谢谢。

一般来说,使用“object”类声明的Scala单例实例比Java静态方法更易于测试,主要是因为它们能够实现traits和扩展其他类,因此适合典型的面向对象测试范式


现在,如果您碰巧做了一些不幸的事情,比如在单例对象中存储可变状态,那么您将遇到与测试Java单例时相同的问题。当然,有一个简单的解决方案:永远不要在对象体中使用“var”。这是“永远不要使用var,period”这一高级建议的一个微不足道的专门化。

与Java中的静态相同-对象的引用很难为了测试目的而交换,因此您通常希望避免它们,除了无副作用的无状态实用程序方法,如Math.min、Math.max。与Java静态一样,持有状态的对象使得测试特别困难

不过,Scala对象比Java静态对象有一个优势——您可以使对象扩展一些超类型并通过该接口引用。然后,您可以将该对象注入到客户端类的构造函数中,这样您的客户端就更易于测试:

object MyRunnable extends Runnable {
  def run() { }
}

class Client(r: Runnable) {
  // ..
}

new Client(MyRunnable)
new Client(mock[Runnable]) // you can substitute the object with a mock for tests
对于纯Java静态,这是不可能的。您可以在Java中对单例执行类似的操作(Scala对象与之类似)