java - Mockito 具有静态类和返回 void 的方法

标签 java junit mockito powermockito

我试图在调用方法时使用 Mockito 更改该方法的实现,但我同时遇到两个问题 1) 我的类是静态的,2) 我的方法返回 void。

PowerMockito.doAnswer(new Answer<Void>() {
        public Void answer(InvocationOnMock invocation) throws IOException {
            DeliveryQueue.publishToQueue(testQueue, "message");
            return null;
        }
    }).when(DeliveryQueue).publishToQueue(DeliveryQueue.REAL_QUEUE, "message");

正如您所看到的,我试图告诉我的测试,当我们向 REAL_QUEUE 发布消息时,我们实际上应该将其发送到 testQueueREAL_QUEUEstatic final 因此不可能直接更改它(我尝试了反射但没有成功)。目前的问题是,when(DeliveryQueue) 无法工作,因为它需要一个模拟对象,即使我在上面使用了 PowerMockito.mockstatic(DeliveryQueue.class) 也是如此。我也尝试过 when(DeliveryQueue.getInstance()) 但它也没有被标记为模拟对象。

最佳答案

您是否在类级别添加了@PrepareForTest(DeliveryQueue.class)

试试这个:.when(DeliveryQueue.class); DeliveryQueue.publishToQueue(DeliveryQueue.REAL_QUEUE, "消息");

关于java - Mockito 具有静态类和返回 void 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38271390/

相关文章:

java - 如何实现相互 TLS 身份验证的 JUnit 测试?

java - 如何在一 block 玻璃板上绘制多个矩形?

java - 如何使用 exec 在 Java 中设置环境变量?

GWT 和 MVP 模式中的 Mock View

java - 如何 JUnit 测试 Wicket 页面

java - 如何使用具有特定属性的参数对方法进行 stub

java - 配置 mockito 以在验证错误消息中打印实际参数值

java - mockito 部分参数模拟

java - 使用 Java 更新 Mysql 表行

java - JLabel 字符串自动换行,不带空格