假设我有一个名为call
的方法的接口,它接受了ServiceRequest
的参数。在ServiceRequest
中有名为field dA
和field dB
的字段。我想模拟调用此方法的响应,并返回不同的模拟响应结果,只要ServiceRequest中field dA
的值不同。
我有以下代码,如follow(参考https://www.baeldung.com/mockito-argument-matchers),但它返回空指针异常。这里出了什么问题?
@Mock
private Service service;
@Test
public void testCustomMatcher() {
ServiceRequest req1 = new ServiceRequest();
req1.setFieldA(1);
ServiceRequest req2 = new ServiceRequest();
req2.setFieldA(2);
when(service.call(argThat(new CustomArgMatcher(req1)))).thenReturn("mockResp1");
when(service.call(argThat(new CustomArgMatcher(req2)))).thenReturn("mockResp2");
}
public class CustomArgMatcher implements ArgumentMatcher<ServiceRequest> {
private ServiceRequest left;
public CustomArgMatcher(ServiceRequest s) {
this.left = s;
}
@Override
public boolean matches(ServiceRequest serviceRequest) {
return left.getFieldA() == serviceRequest.getFieldA();
}
}
interface Service {
String call(ServiceRequest request);
}
public class ServiceImpl implements Service {
@Override
public String call(ServiceRequest request) {
return "sample";
}
}
public class ServiceRequest {
private int fieldA;
private int fieldB;
public int getFieldA() {
return fieldA;
}
public void setFieldA(int fieldA) {
this.fieldA = fieldA;
}
public int getFieldB() {
return fieldB;
}
public void setFieldB(int fieldB) {
this.fieldB = fieldB;
}
}
我看到两个问题:
>
ArgumentMatcher必须以某种方式表现得像equals(...)
:它还必须接受null
作为参数,而不引发异常。
查看匹配项的JavaDoc:
如果参数不匹配,则该方法不应断言。它应该只返回false。
试着用这个:
return (null != serviceRequest) && (left.getFieldA() == serviceRequest.getFieldA());
作为一个
null
ServiceRequest对象永远不会匹配任何东西,在这种情况下,它将返回false
。
问题内容: 是否可以使用Java API创建索引并指定自定义分析器?它支持在索引创建时添加映射,但是我找不到不通过HTTP PUT发送JSON的方法来执行以下操作: 我可以使用JSONBuilder构建这样的查询,但是据我所知,我在API中找不到运行它的位置,没有可以使用的任何东西,也没有可以使用的地方。什么是正确的方法? 问题答案: 您可以使用设置分析仪。有几种建立设置的方法。您可以从文本,地图
包的声明和使用非常简单,在了解基本语法之后,下面通过一个案例演示在 Java 程序中声明包,以及不同包之间类的使用。 1)创建一个名为 com.dao 的包。 2)向 com.dao 包中添加一个 Student 类,该类包含一个返回 String 类型数组的 GetAll() 方法。Student 类代码如下: 3)创建 com.test 包,在该包里创建带 main() 方法的 Test 类。
本章节中,简述自定义类的创建和使用方法,供参考。 创建自定义类 用户可以定义自己的类,通过继承 ThingJS 内部类(比如:Thing 类),对 ThingJS 进行扩展和封装。 我们推荐使用 ES6 语法定义一个类。例如,自定义汽车类 Car。 // 继承 Thing 类 class Car extends THING.Thing { constructor(app) { super(
问题内容: 我看到一些新网站在其网站上使用自定义字体(常规Arial,Tahoma等除外)。 并且它们支持大量的浏览器。 怎么做到的?同时,如果可能的话,还会阻止人们自由下载字体。 问题答案: 通常,您可以在CSS中使用自定义字体。这是一个非常基本的示例: 然后,简单地在特定元素上使用字体: (是您的选择器)。 请注意,某些字体格式并非在所有浏览器上都有效;您可以使用fontsquirrel.co
问题内容: 我正在尝试在Go中创建和使用自定义包。这可能很明显,但是我找不到很多信息。基本上,我在同一个文件夹中拥有这两个文件: mylib.go main.go 当我尝试时,出现此错误: 我尝试先运行,但似乎没有做任何事(没有生成文件,没有错误消息)。所以有什么想法我该怎么做? 问题答案: 首先,请务必阅读并理解“如何编写Go代码”文档。 实际答案取决于您“定制包装”的性质。 如果打算用于一般用
问题内容: 在我的html中,我很好奇使用唯一标识符(例如 保存图片)而不是语义是否正确。例如: 是否优先拥有: 与CSS: 而不是:我目前有: 与CSS: 唯一标识符的使用在语义上是否正确? 问题答案: 最好避免使用自定义标签,因为您永远不知道这些标签何时会标准化,并在将来有特殊用途。 如果要避免使用标头标记,对于您的示例最好的操作如下: 此外: 如果在设计页面时不使用标准html标记,则在禁用