如何在Akka Actor范围内模拟静态函数?

时间:2017-09-01 14:43:47

标签: java unit-testing junit akka powermockito

我有一个从Helper调用静态方法的actor我想模仿:

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上下文中模拟静态方法,我应该做些什么改变吗?

1 个答案:

答案 0 :(得分:0)

当我使用mockStatic时,在

"main"@1 in group "main": RUNNING 

可以,但是不能在

中使用
"AkkaTestKit-akka.actor.default-dispatcher-3"@2,614 in group "main": RUNNING

创建道具时只需使用CallingThreadDispatcher

final Props props = Props.create(ExampleActor.class).withDispatcher(CallingThreadDispatcher.Id());

对我有用。