如何模拟Java静态块

问题描述 投票:0回答:1

我在第 3 方库中有以下 Java 类:

public final class SomeFactory {
  public static native someMethod1()
  public static native someMethod2()

  private SomeFactory() {
  }

  static {
    System.loadLibrary("some_lib");
  }
}

这会使我的测试崩溃,因为加载

some_lib
失败。

java.lang.UnsatisfiedLinkError: no some_lib in java.library.path: /usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib

那么我该如何模拟这个类呢?我正在起诉 MockK 和 Kotest。

我尝试了

mockk()
mockkStatic()
mockkConstructor()
等的不同组合,但没有任何效果。我什至尝试过
mockkStatic(System::class)
,但似乎它完全破坏了 JVM。

java kotlin static mockk
1个回答
0
投票

我所做的是创建一个新对象,它包装了原始对象:

object SomeWrapper {
  fun someMethod1() = SomeFactory.someMethod1()
}

然后在 MockK 中,只需模拟对象即可:

mockkObject(SomeWrapper)
every { SomeWrapper.method1() } returns mockk()
© www.soinside.com 2019 - 2024. All rights reserved.