如何在Akka Actor作用域中模拟静态函数?

rvpgvaaj  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(114)

我有一个演员,它从一个我想模仿的助手调用一个静态方法:

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

bpsygsoo

bpsygsoo1#

当我使用mockStatic时,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());

对我有用。

相关问题