Mockito Matcher参数显示为undefined

时间:2014-06-20 15:43:32

标签: java junit mocking mockito

我正在尝试模拟应用程序的Main类中包含的方法。我想测试一下,当所有参数都成功提交后,应用程序会调用正确的方法uploadFiles。 when - thenReturn对如下所示:

NrClient nrClient = (NrClient)Mockito.mock(NrClient.class);
Mockito.when(nrClient.uploadFiles("DF49ACBC8", anyList(), "dl")).thenReturn("");

这显示为运行时异常:“对于MainTest类型,方法anyString()未定义。” 我有进口:

import org.mockito.Mockito;
import org.mockito.Matchers;

那么为什么这个方法不定义?我的实施中是否存在问题?

我也尝试过具有相同结果的anyString()和anyInt()。

2 个答案:

答案 0 :(得分:9)

你应该把它作为编译时错误,而不是异常(除非实际的例外是你有一个未解决的编译时错误)。

只需导入org.mockito.Matchers即表示您可以在班级的任何位置使用名称Matchers来表示org.mockito.Matchers。如果要导入方法,则需要静态通配符导入:

import static org.mockito.Matchers.*;

或具体方法:

import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyList;

或者您可以在调用代码中限定方法名称:

Mockito.when(nrClient.uploadFiles("DF49ACBC8", Matchers.anyList(), "dl"))
       .thenReturn("");

答案 1 :(得分:0)

使用下面的导入

type House = {
    _tag: "house";
    street: string;
    zipCode: number;
}

type Car = {
    _tag: "car",
    make: string;
    model: string;
    year: number
}

const thingsA: Array<House|Car> = [{
    _tag: "house",
    street: '123 Fake Street',
    zipCode: 12345
}, {
    _tag: "car",
    make: 'Tesla',
    model: 'Model X',
    year: 2022
}]


for (const thing of thingsA) {
  switch (thing._tag){
    case "house": {
      // now we know it's a house...
      console.log(thing.street)
      break
    }
    case "car": {
      // now we know it's a car...
      console.log(thing.model)
      break
    }
  }
}

避免使用 Matchers 类,因为它现在已被弃用,以避免与 Hamcrest org.hamcrest.Matchers 类发生名称冲突。