是否可以调用既是最终方法又不受单元测试保护的方法?
Is it possible to call a method that is both final and protected from a unit test?
我有这个例子class
class Foo extends Parent {
final override protected def test(): String = "hello world"
}
就像现在一样,我无法在我的单元测试中直接调用此方法。我正在使用 Mockito,根据我目前所读的内容,我要么需要
- 删除
final
这样我就可以用另一个 child class (Bar extends Foo)
- 将 Foo class 更新为
private[package]
。
两种选择都不可取。有没有办法在保留签名的同时仍然公开该方法以进行单元测试?
您可以通过在测试中扩展 Foo
使 test
可间接访问,子类声明调用 test
.
的 public 方法
您没有提到您使用的是哪个测试执行框架,但这里有一个使用 FlatSpec
风格的 ScalaTest 的例子:
import org.scalatest.flatspec.AnyFlatSpec
class FooSpec extends AnyFlatSpec {
class TestingFoo extends Foo {
def accessibleTest: String = test
}
it should "say hello" in {
assert(new TestingFoo().accessibleTest == "hello world")
}
}
总体方法与其他测试框架类似。
我有这个例子class
class Foo extends Parent {
final override protected def test(): String = "hello world"
}
就像现在一样,我无法在我的单元测试中直接调用此方法。我正在使用 Mockito,根据我目前所读的内容,我要么需要
- 删除
final
这样我就可以用另一个 child class (Bar extends Foo) - 将 Foo class 更新为
private[package]
。
两种选择都不可取。有没有办法在保留签名的同时仍然公开该方法以进行单元测试?
您可以通过在测试中扩展 Foo
使 test
可间接访问,子类声明调用 test
.
您没有提到您使用的是哪个测试执行框架,但这里有一个使用 FlatSpec
风格的 ScalaTest 的例子:
import org.scalatest.flatspec.AnyFlatSpec
class FooSpec extends AnyFlatSpec {
class TestingFoo extends Foo {
def accessibleTest: String = test
}
it should "say hello" in {
assert(new TestingFoo().accessibleTest == "hello world")
}
}
总体方法与其他测试框架类似。