Powermock在使用scala、junit时无法模拟静态方法

Powermock在使用scala、junit时无法模拟静态方法,scala,junit,powermock,Scala,Junit,Powermock,我以前在java和junit中使用过Powermock。我已经成功地模拟了静态方法,如以下示例中所示: @PrepareForTest({ TimeHelper.class, MainApp.class }) @RunWith(PowerMockRunner.class) public class TestSuite { @Before public void setUp() throws IOException { PowerMockito.mockStatic(Ti

我以前在java和junit中使用过Powermock。我已经成功地模拟了静态方法,如以下示例中所示:

@PrepareForTest({ TimeHelper.class, MainApp.class })
@RunWith(PowerMockRunner.class)
public class TestSuite {
    @Before
    public void setUp() throws IOException {
     PowerMockito.mockStatic(TimeHelper.class);
     Mockito.doReturn("2015-01-01 00:00:00").when(TimeHelper.getUnixTime());
    }
}
然而,当转换为scala时,这似乎不起作用。请注意,我们下面调用的“getUnixtTime”方法也在scala中实现

@PrepareForTest(Array( classOf[TimeHelper], classOf[MainApp] ))
@RunWith(classOf[PowerMockRunner])
class TestSuite {
    @Before
    def setUp() {
     PowerMockito.mockStatic(classOf[TimeHelper]);
     Mockito.doReturn("2015-01-01 00:00:00").when(TimeHelper.getUnixTime());
    }
}
在运行scala中实现的测试时,我似乎得到了测试返回的值,而不是模拟值。有人能指出我遗漏了什么吗

编辑:下面是scala中getUnixTime函数的签名:

object TimeHelper{
    def getUnixTime(): String = {
      //logic
    }
}

那么你能给我们看看你的
TimeHelper.getUnixTime
的源代码吗?它是在同伴对象中实现的还是其他什么?是的,它确实是在同伴对象中实现的。添加了一个带有签名的编辑。请查看字节码。你确定TimeHelper.class看起来像一个普通的类,PowerMock可以在它上面执行字节码操作黑色巫毒魔法。。。我的意思是:是什么让您认为scalac的最终输出与PowerMock完全兼容?除此之外:不要编写需要模拟的静态代码。这才是真正的问题;-)我看到创建了以下类文件:TimeUtils.class、TimeUtils$.class和TimeUtils$$anonfun$1.class。不完全确定这意味着什么。我去看看。谈到第二部分,我完全同意,我不太赞成嘲笑自己。这一个确实需要模拟,因为getUnixTime()函数给出了不确定的结果,而且我没有发现任何其他方法可以测试使用它的模块。请随时添加任何建议。