【发布时间】:2017-09-01 14:43:46
【问题描述】:
我有一个演员,它从我想模拟的 Helper 调用静态方法:
public class ExampleActor extends AbstractActor {
public Receive createReceive() {
.match(CachedFile.class, cachedFile -> {
UploadFileHelper.makeRequest(cachedFile.getContent());
return true;
});
}
}
我试过嘲笑它:
@RunWith(PowerMockRunner.class)
@PrepareForTest(UploadFileHelper.class)
public class ExampleActorTest {
@Test
public void testCreateFile() {
new TestKit(system) {{
PowerMockito.mockStatic(UploadFileHelper.class);
PowerMockito.when(
UploadFileHelper.makeRequest(any())
).thenReturn(true);
exampleActor.tell(cachedFile, getRef());
}}
}
}
但出于某种原因,调用的是真正的方法而不是模拟的方法。
为了在 Akka Actor 上下文中模拟静态方法,我应该做些什么改变?
【问题讨论】:
-
静态方法是出了名的难以测试。考虑用实用程序中的实例方法替换。所有的静态保存都是对象构造。将实用程序实例作为依赖项传递给 Actor。
-
然后我将在参与者和静态方法之间创建一个服务。谢谢!
-
我同意:当您可以轻松摆脱 static 时 - 然后摆脱它。除此之外 - 你的代码看起来不错......我只是不明白你为什么在这里创建一个新的匿名内部类 - 不知道 TestKit 是关于什么的。
-
@GhostCat 谢谢,我正在关注此页面的示例:doc.akka.io/docs/akka/2.5/java/testing.html您是否推荐另一种测试 Akka Actors 的方法?
标签: java unit-testing junit akka powermockito