gpt4 book ai didi

java - 我如何模拟 void 方法并使用 mockito 保留其他所有内容?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:27 24 4
gpt4 key购买 nike

我正在使用 Mockito 并希望做一件简单的事情。如何模拟特定类的 void 方法?我试过了……

    CacheService cs = mock(CacheService.class);
when(cs.startCache()).then( PopulateCache.addTestEntriesToCache() );

但是我得到了编译错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:testCompile (default-testCompile) on project cme-productplus-web: Compilation failure: Compilation failure:
[ERROR] \Documents and Settings\E18538\workspace\cme-productplus-web\src\test\java\com\cme\clearing\product\server\PopulateCacheServiceImpl.java:[32,65] 'void' type not allowed here
[ERROR] \Documents and Settings\E18538\workspace\cme-productplus-web\src\test\java\com\cme\clearing\product\server\PopulateCacheServiceImpl.java:[32,20] 'void' type not allowed here

我的意图不是调用 CacheService.startCache 的正常代码,而是调用我自己的方法“PopulateCache.addTestEntriesToCache()”。我该怎么做?

编辑:根据给出的响应,我尝试在实现模拟的地方编辑我的类,但是模拟方法(大概是 doAnswer)没有被调用...

public class PopulateCacheServiceImpl extends RemoteServiceServlet implements PopulateCacheService {

/**
*
*/
private static final long serialVersionUID = 1L;

public Boolean initCache() {
boolean ret = false;
try {
setupMockCache();
CacheService.getInstance().startCache();
ret = true;
} catch (Exception e) {
e.printStackTrace(System.err);
ret = false;
} // try
return ret;
} // initCache

private void setupMockCache() {
CacheService cs = mock(CacheService.class);
try {
doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) throws Throwable {
PopulateCache.addTestEntriesToCache();
return null;
}
}).when(cs).startCache();
} catch (SQLException e) {
e.printStackTrace();
}
} // setupMockCache

}

谢谢,-戴夫

最佳答案

您正在为 CacheService 制作模拟,但您仍然没有返回它并在任何地方使用它。相反,您正在调用真正的静态 CacheService.instance() 方法,该方法不会返回您的模拟。让您 setupMockCache() 返回 CacheService 并直接使用它,而不是通过 instance() 方法。

同样在问题标题/摘要中,您说“其他一切保持不变”。如果您的意思是您希望 CacheService 的其余部分与正常情况下的行为相同,那么您可能需要部分模拟,您可以使用 Mockito 的 spy() 而不是 mock() 来完成。

关于java - 我如何模拟 void 方法并使用 mockito 保留其他所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com