我有一个案例类case class FOO。并想测试一个myMethod返回FOO()给定参数值的方法value1。
我有一个像 : 的测试myMethod(value1) should equal FOO。
测试失败FOO did not equal FOO()。
FOO和 和有FOO()什么区别?
一个case class Foo()desugars成等价的东西
class Foo() extends Product with Serializable {
// some methods
}
object Foo extends (() => Foo) with Serializable {
// some methods
}
Run Code Online (Sandbox Code Playgroud)
所以Foo()创建一个 Foo 类的实例,而它Foo是对 Foo 伴随对象的引用。
但是,如果您的案例类Foo没有参数,您应该考虑将其设为案例对象。如果您没有滥用具有内部可变状态 [1] 的案例类,则Foo()无论如何所有实例都应该是无法区分的。
[1] 如果是,请考虑改用常规课程。