when.thenreturn()可以用于void返回值的方法吗
时间: 2024-10-23 19:06:18 浏览: 9
`when.thenReturn()` 是 Promises/A+ 规范中的一种链式调用方法,通常用于处理异步操作。这个方法适用于那些返回非Promise的函数,包括像 `void` 返回值这样的无返回值函数。当你想要模拟一个异步操作并立即返回一个Promise结果时,即使该操作本身没有返回值,也可以通过将 `undefined` 或其他值包装进一个Promise来实现。
例如:
```javascript
function voidMethod() {
// 一个没有返回值的方法
}
const promise = new Promise((resolve) => {
setTimeout(() => {
when.thenReturn(voidMethod()); // 将 voidMethod() 包装成Promise
resolve();
}, 0);
});
promise.then(result => {
console.log(result); // 输出 undefined 或者 null(取决于封装的方式)
});
```
在这种场景下,`.thenReturn()` 之后跟的是你希望 Promise 解决后的最终状态,而不是实际的函数返回值。所以,对于 `voidMethod()` 这样的 void 函数,`.thenReturn(voidMethod())` 等同于 `.thenReturn(undefined)`。
相关问题
@Test public void testInit_null() throws Exception{ // when(ftpClientService.getFtpClient(any())).thenReturn(null); //when(task.getCleanDirs().add(any())).thenReturn(null); FileCleanTask task=new FileCleanTask(); task.getCleanDirs().add(""); List<FileCleanTask>tasks=Arrays.asList(task); if(tasks.isEmpty()) { try { Thread.sleep(60000); } catch (InterruptedException e) { log.error("InterruptedException while sleeping",e); } } // when(ftpManagerClient.getCleanTasks(0)).thenReturn(null); //doNothing().when(task.).add(any()); cleanTaskPollService.init(); }怎么调成tasks.isEmpty为1使得UT
可以通过以下方式将 `tasks.isEmpty()` 的返回值设置为 1:
```
@Test
public void testInit_null() throws Exception{
// when(ftpClientService.getFtpClient(any())).thenReturn(null);
//when(task.getCleanDirs().add(any())).thenReturn(null);
FileCleanTask task=new FileCleanTask();
task.getCleanDirs().add("");
List<FileCleanTask>tasks=Arrays.asList(task);
if(tasks.size() == 0) // 修改此处的判断条件
{
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
log.error("InterruptedException while sleeping",e);
}
}
// when(ftpManagerClient.getCleanTasks(0)).thenReturn(null);
//doNothing().when(task.).add(any());
cleanTaskPollService.init();
}
```
将原来的 `tasks.isEmpty()` 改为 `tasks.size() == 0` 即可。
mockito.when返回值是void
当Mockito.when()方法返回void时,通常是因为我们在模拟一个void方法。这意味着我们不能使用thenReturn()方法来指定返回值,而是应该使用doNothing()或doThrow()等方法来模拟方法的行为。例如:
```
Mockito.doNothing().when(mockObject).voidMethod();
```
这将模拟一个voidMethod()方法,使其不执行任何操作。如果我们想在方法被调用时抛出异常,可以使用doThrow()方法:
```
Mockito.doThrow(new RuntimeException()).when(mockObject).voidMethod();
```
这将模拟一个voidMethod()方法,使其在被调用时抛出RuntimeException异常。
阅读全文