我如何通过 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 也将应用于每个模拟,没有办法解决这个问题。