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