我正在尝试模拟应用程序的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()。
答案 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 类发生名称冲突。