我如何通过 ScalaMock 使用受保护的抽象方法存根抽象 java class?
How I can stub abstract java class with protected abstract methods via ScalaMock?
我正在尝试存根抽象 java.nio.channels.ServerSocketChannel
class 但得到了
Error:(15, 18) object creation impossible, since:
it has 2 unimplemented members.
/** As seen from <$anon: java.nio.channels.ServerSocketChannel>, the missing signatures are as follows.
* For convenience, these are usable as stub implementations.
*/
protected[package spi] def implCloseSelectableChannel(): Unit = ???
protected[package spi] def implConfigureBlocking(x: Boolean): Unit = ???
socket = stub[ServerSocketChannel]
当然我可以在测试子class中覆盖这些方法,但也许有更优雅的解决方案?
宏模拟是模拟类型的子class。因此它们遵守与 Scala 中常规 class 层次结构相同的限制。
除了直接依赖于抽象 class 之外,您可以使用一个接口,例如NetworkChannel
并嘲笑它?
扩大方法可见性的示例:
package java.nio.channels;
abstract class ServerSocketChannelSub extends ServerSocketChannel {
def implCloseSelectableChannel(): Unit
def implConfigureBlocking(x: Boolean): Unit
}
然后在你的测试中
val socketChan = mock[ServerSocketChannelSub]
构造此子实例的所有副作用class 也将应用于每个模拟,没有办法解决这个问题。
我正在尝试存根抽象 java.nio.channels.ServerSocketChannel
class 但得到了
Error:(15, 18) object creation impossible, since:
it has 2 unimplemented members.
/** As seen from <$anon: java.nio.channels.ServerSocketChannel>, the missing signatures are as follows.
* For convenience, these are usable as stub implementations.
*/
protected[package spi] def implCloseSelectableChannel(): Unit = ???
protected[package spi] def implConfigureBlocking(x: Boolean): Unit = ???
socket = stub[ServerSocketChannel]
当然我可以在测试子class中覆盖这些方法,但也许有更优雅的解决方案?
宏模拟是模拟类型的子class。因此它们遵守与 Scala 中常规 class 层次结构相同的限制。
除了直接依赖于抽象 class 之外,您可以使用一个接口,例如NetworkChannel
并嘲笑它?
扩大方法可见性的示例:
package java.nio.channels;
abstract class ServerSocketChannelSub extends ServerSocketChannel {
def implCloseSelectableChannel(): Unit
def implConfigureBlocking(x: Boolean): Unit
}
然后在你的测试中
val socketChan = mock[ServerSocketChannelSub]
构造此子实例的所有副作用class 也将应用于每个模拟,没有办法解决这个问题。