PowerMockito UnfinishedStubbingException

PowerMockito UnfinishedStubbingException

你好,我有这个 PowerMockito 测试抛出了一个 UnfinishedStubbingException

@RunWith(PowerMockRunner.class)
@PrepareForTest(SuperHero.class)
public class SMSActionPresaInCaricoTest {

@Test
public void testExecute() {
    PowerMockito.mockStatic(SuperHero.class);
    when(SuperHero.findSuperHero(anyString())).thenReturn(new SuperHero ());
    Action action = new Action();
    action.execute("", "");
}

class SuperHero 有一个静态方法 findSuperHero,它 return 是 SuperHero 从数据库读取数据的实例。

我认为错误是由于 thenReturn 试图 return 模拟的 class SuperHero 的实例。

有没有办法在这种情况下使用 PowerMockito?还是需要进行一些重构?

抱歉,无法复制这个。

这是我的完整测试 class,包括所有导入:

package com.example;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.mockito.Matchers.anyString;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.junit.Assert.assertNotNull;

@RunWith(PowerMockRunner.class)
@PrepareForTest(SuperHero.class)
public class SMSActionPresaInCaricoTest {

    @Test
    public void testExecute() {
        PowerMockito.mockStatic(SuperHero.class);
        when(SuperHero.findSuperHero(anyString())).thenReturn(new SuperHero());
        assertNotNull(SuperHero.findSuperHero("Batman"));
    }
}

当我运行这个测试时,它通过了。

我没有你的 SuperHero class,所以我用这个代替:

package com.example;

public class SuperHero {
    public static SuperHero findSuperHero(String name) {
        throw new RuntimeException("This method should have been mocked");
    }
}

我正在使用 PowerMockito 1.6.2,以防有帮助。