Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用PowerMock模拟枚举时静态字段为Null_Java_Junit_Mockito_Powermock - Fatal编程技术网

Java 使用PowerMock模拟枚举时静态字段为Null

Java 使用PowerMock模拟枚举时静态字段为Null,java,junit,mockito,powermock,Java,Junit,Mockito,Powermock,我已经编写了一个线程池,但无法为该类编写Junits(PowerMock) public enum ThreadPool { INSTANCE; private static final String THREAD_POOL_SIZE = "threadpool.objectlevel.size"; private static TPropertyReader PROP_READER = new PropertyReader(); private final ExecutorService e

我已经编写了一个线程池,但无法为该类编写Junits(PowerMock)

public enum ThreadPool {
INSTANCE;

private static final String THREAD_POOL_SIZE = "threadpool.objectlevel.size";
private static TPropertyReader PROP_READER = new PropertyReader();
private final ExecutorService executorService;
private static final ILogger LOGGER = LoggerFactory
        .getLogger(ReportExecutorObjectLevelThreadPool.class.getName());

ThreadPool() {
    loadProperties();
    int no_of_threads = getThreadPoolSize();
    executorService = Executors.newFixedThreadPool(no_of_threads);

}

public void submitTask(Runnable task) {
    executorService.execute(task);
}

private static void loadProperties() {
    try {
        PROP_READER.loadProperties("Dummy");
    } catch (final OODSystemException e) {
        LOGGER.severe("Loading properties for app failed!");
    }
}

private int getThreadPoolSize() {
    return Integer.valueOf(PROP_READER
            .getProperty(THREAD_POOL_SIZE));
}
}
在模拟这个类时,我在PROP_READER.loadProperties(“DUMMY”)行中得到了NullPointerException

我的测试用例是:-

PowerMockito.whenNew(PropertyReader.class).withNoArguments().thenReturn(mockPropertyReader);
PowerMockito.doNothing().when( mockPropertyReader,"loadProperties",anyString());
mockStatic(ThreadPool.class);

首先,您需要设置枚举的内部状态,因为枚举是最终类 枚举的实例将在类加载时加载

ThreadPool mockInstance = mock(ThreadPool .class);
Whitebox.setInternalState(ThreadPool.class, "INSTANCE", mockInstance);
然后

然后嘲笑

doNothing().when(mockInstance).loadProperties(any(String.class));
不要忘记将以下注释添加到测试中

@RunWith(PowerMockRunner.class)
@PrepareForTest({ThreadPool.class})
如果仍然不起作用,您需要查看需要在内部状态下设置的类中的哪个成员

@RunWith(PowerMockRunner.class)
@PrepareForTest({ThreadPool.class})