也许这是一个新手问题,但找不到答案.
我需要使用Mockito存根方法.如果方法有"简单"参数,那么我就可以做到.例如,一个包含两个参数的车辆颜色和门数的查找方法:
when(carFinderMock.find(eq(Color.RED),anyInt())).thenReturn(Car1);
when(carFinderMock.find(eq(Color.BLUE),anyInt())).thenReturn(Car2);
when(carFinderMock.find(eq(Color.GREEN), eq(5))).thenReturn(Car3);
Run Code Online (Sandbox Code Playgroud)
问题是find参数是一个复杂的对象.
mappingFilter = new MappingFilter();
mappingFilter.setColor(eq(Color.RED));
mappingFilter.setDoorNumber(anyInt());
when(carFinderMock.find(mappingFilter)).thenReturn(Car1);
Run Code Online (Sandbox Code Playgroud)
此代码不起作用.错误是"无效使用参数匹配器!1匹配器预期,2记录".
无法修改"find"方法,它需要是MappingFilter参数.
我想我必须做"某事"来表示Mockito,当mappingFilter.getColor为RED,而mappingFilter.getDoorNumber为any时,则必须返回Car1(对于其他两个句子也是如此).但是怎么样?
我正在尝试从通过 JAXB 生成的类序列化 XML。
班上:
package ws.avail;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"pos",
"uniqueID",
"availStatusMessages"
})
@XmlRootElement(name = "OTA_HotelAvailNotifRQ")
public class OTAHotelAvailNotifRQ {
...
}
Run Code Online (Sandbox Code Playgroud)
文件“package-info.java”:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.opentravel.org/OTA/2003/05", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ws.avail;
Run Code Online (Sandbox Code Playgroud)
编组器(简化后没有错误处理):
context = JAXBContext.newInstance(rootElement.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(rootElement, stringWriter);
return stringWriter.toString();
Run Code Online (Sandbox Code Playgroud)
此代码生成:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OTA_HotelAvailNotifRQ Version="1.000" Target="TEST">
....
Run Code Online (Sandbox Code Playgroud)
我期望这样的事情:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.000" Target="TEST">
....
Run Code Online (Sandbox Code Playgroud)
我有一个类似的代码并且工作正常,但我无法理解为什么此代码不显示名称空间。有什么线索吗?谢谢!