在 Scalatest 中使用访问修饰符测试私有方法
Testing a private method with access modifier in Scalatest
我有以下问题。
假设我有以下 class(此处的示例:Link):
package com.example.people
class Person(val age: Int)
object Person {
private def transform(p: Person): Person = new Person(p.age + 1)
}
所以我有一个包,里面有一个 class 和一个私有方法。
现在我知道使用 scalatest 我可以做这样的事情。在我的测试文件夹中,我有:
import org.scalatest.{ FlatSpec, PrivateMethodTester }
class PersonTest extends AnyFunSuite with PrivateMethodTester {
test("A Person" should "transform correctly") {
val p1 = new Person(1)
val transform = PrivateMethod[Person]('transform)
assert(p2 === p1 invokePrivate transform(p1))
}
}
现在,我的问题是,如果我按如下方式向我的私有方法添加访问修饰符(类似于此 Link 中的答案):
package com.example.people
class Person(val age: Int)
object Person {
private[example] def transform(p: Person): Person = new Person(p.age + 1)
}
测试抱怨 transform 不再是私有方法。
有没有办法我仍然可以使用私有方法测试器,即使我有私有函数的访问修饰符?
给出
package com.example.people
class Person(val age: Int)
object Person {
private[example] def transform(p: Person): Person = new Person(p.age + 1)
}
你只需要确保相应的测试也在example
包中
package example
class PersonTest extends AnyFunSuite {
test("A Person should transform correctly") {
val p1 = new Person(1)
Person.transform(p1) // transform is now accessible
...
}
}
}
在这种情况下不需要 PrivateMethodTester
因为 private[example]
使该方法对 example
包的所有成员可用。
我有以下问题。
假设我有以下 class(此处的示例:Link):
package com.example.people
class Person(val age: Int)
object Person {
private def transform(p: Person): Person = new Person(p.age + 1)
}
所以我有一个包,里面有一个 class 和一个私有方法。
现在我知道使用 scalatest 我可以做这样的事情。在我的测试文件夹中,我有:
import org.scalatest.{ FlatSpec, PrivateMethodTester }
class PersonTest extends AnyFunSuite with PrivateMethodTester {
test("A Person" should "transform correctly") {
val p1 = new Person(1)
val transform = PrivateMethod[Person]('transform)
assert(p2 === p1 invokePrivate transform(p1))
}
}
现在,我的问题是,如果我按如下方式向我的私有方法添加访问修饰符(类似于此 Link 中的答案):
package com.example.people
class Person(val age: Int)
object Person {
private[example] def transform(p: Person): Person = new Person(p.age + 1)
}
测试抱怨 transform 不再是私有方法。
有没有办法我仍然可以使用私有方法测试器,即使我有私有函数的访问修饰符?
给出
package com.example.people
class Person(val age: Int)
object Person {
private[example] def transform(p: Person): Person = new Person(p.age + 1)
}
你只需要确保相应的测试也在example
包中
package example
class PersonTest extends AnyFunSuite {
test("A Person should transform correctly") {
val p1 = new Person(1)
Person.transform(p1) // transform is now accessible
...
}
}
}
在这种情况下不需要 PrivateMethodTester
因为 private[example]
使该方法对 example
包的所有成员可用。