如何在Kotlin中模拟静态方法?

我试图在Kotlin中用jMockit模拟一个静态方法:

object: MockUp<System>() { @Mock fun getProperty(name: String) = "tagB" } 

但是我得到以下错误:

无法加载日志管理器“tagB”java.lang.ClassNotFoundException:tagB在java.net.URLClassLoader.findClass(URLClassLoader.java:381)在java.lang.ClassLoader.loadClass(ClassLoader.java:424)在sun.misc.Launcher $ java.util.logging.LogManager中的$ AppClassLoader.loadClass(Launcher.java:331)java.util.logging.LogManager $ 1.run(LogManager.java:195)java.util.logging上的java.lang.ClassLoader.loadClass(ClassLoader.java:357) .LogManager $ 1.run(LogManager.java:181)at java.util.AccessController.doPrivileged(Native Method)at java.util.logging.LogManager。(LogManager.java:181)at java.util.logging.Logger.getPlatformLogger (Logger.java:572)at sun.util.logging.LoggingSupport.getLogger(LoggingSupport.java:100)at sun.util.logging.PlatformLogger $ java.util.logging.LoggingProxyImpl.getLogger(LoggingProxyImpl.java:41)在sun.util.logging.PlatformLogger上使用JavaLoggerProxy。(PlatformLogger.java:602);在sun.util.logging上使用sun.util.logging.PlatformLogger。(PlatformLogger.java:239)使用JavaLoggerProxy。(PlatformLogger.java:597)。 PlatformLog java中的sun.util.locale.provider.LocaleProviderAdapter(LocaleProviderAdapter.java:165)处的sun.util.locale.provider.LocaleServiceProviderPool.config(LocaleServiceProviderPool.java:142)处的ger.getLogger(PlatformLogger.java:198) (Formatter.java:1892)at java.util.Formatter。(Formatter.java:1892)at java.util.Formatter。(Formatter.Formatter.Formatter。 .java:1914)at org.junit.runner.runner.Description.formatDisplayName(Description.java:114)at org.junit.runner.Description.createTestDescription(Description。java.lang.String.format(String.java:2940) java:73)at io.kotlintest.TestCase.getDescription(testcase.kt:45)at io.kotlintest.TestBase.descriptionForSuite $ kotlintest_main(TestBase.kt:153)at io.kotlintest.TestBase.getDescription $ kotlintest_main(TestBase.kt :39)at com.intellij.junit4.JUnit4IdeaTestRunner.getDescription(JUnit4IdeaTestRunner.java:123) )at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:99)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart( JUnitStarter.java:234)在sun.reflect.NativeMethodAccessorImpl.invoke(Native方法)上的com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.intellij.rt.execution.application.AppMain.main (AppMain.java:144)日志记录配置类“tagB”失败java.lang.ClassNotFoundException:tagB …

其他有预期的方法也不成功。

我怎样才能嘲笑Kotlin的静态方法?

你应该像这样模拟系统:

 class MockSystem : MockUp<System>() { @Mock fun getProperty(name: String) = "tagB" } class MockTest { val m = MockSystem(); @Test fun test() { Assert.assertEquals(System.getProperty("hello"), "tagB") } }