如何测试 Primefaces GeocodeEvent
How to test a Primefaces GeocodeEvent
我正在使用 Primefaces 6.1。
我正在与 p:gMap 一起工作
<p:gmap center="#{sellerController.centerGeoMap}"
zoom="13"
type="MAP"
style="width:100%;height:300px"
id="geoGmap"
widgetVar="geoMap"
binding="#{sellerController.geoMap}"
model="#{sellerController.geoModel}"
>
<p:ajax event="geocode" listener="#{sellerController.onGeocode}" update="@this" />
</p:gmap>
应用程序正在运行,但我不知道如何测试使用 ajax 事件 "geocode" 调用的方法,因为当我尝试创建 GeocodeEvent 的实例时,会引发 IllegalArgumentException,因为"source is null"
这里是测试方法
public void onGeocode(GeocodeEvent event) {
...
...
}
这里是部分堆栈跟踪
java.lang.IllegalArgumentException: null source
at java.util.EventObject.<init>(EventObject.java:56)
at javax.faces.event.FacesEvent.<init>(FacesEvent.java:72)
at javax.faces.event.BehaviorEvent.<init>(BehaviorEvent.java:71)
at javax.faces.event.AjaxBehaviorEvent.<init>(AjaxBehaviorEvent.java:73)
at org.primefaces.event.AbstractAjaxBehaviorEvent.<init>(AbstractAjaxBehaviorEvent.java:27)
at org.primefaces.event.map.GeocodeEvent.<init>(GeocodeEvent.java:30)
如何测试这个方法?
提前谢谢你
大家好,这里是使用 Mockito 的完整示例。事实上很明显...... :/
使用 Mockito,您可以使用以下内容模拟这两个参数
UIComponent mockUiComponent = Mockito.mock(UIComponent.class);
Behavior mockBehavior = Mockito.mock(Behavior.class);
在我的例子中,方法的其余部分如下所示:
sellerController.onGeocode(new GeocodeEvent(mockUiComponent,mockBehavior, "", null));
//Asserts for the case with null on last parameter
List<GeocodeResult> gResults = new ArrayList<>();
LatLng expectedLatLng = new LatLng(2d, 3d);
String expectedTitle = "via dei casari 1";
gResults.add(new GeocodeResult(expectedTitle, expectedLatLng));
gResults.add(new GeocodeResult("via dei casari 2",new LatLng(4d, 5d)));
gResults.add(new GeocodeResult("via dei casari 3",new LatLng(6d, 7d)));
sellerController.onGeocode(new GeocodeEvent(mockUiComponent,mockBehavior, "", gResults));
// Asserts for the case with a populated list
希望对你有用
我正在使用 Primefaces 6.1。
我正在与 p:gMap 一起工作
<p:gmap center="#{sellerController.centerGeoMap}"
zoom="13"
type="MAP"
style="width:100%;height:300px"
id="geoGmap"
widgetVar="geoMap"
binding="#{sellerController.geoMap}"
model="#{sellerController.geoModel}"
>
<p:ajax event="geocode" listener="#{sellerController.onGeocode}" update="@this" />
</p:gmap>
应用程序正在运行,但我不知道如何测试使用 ajax 事件 "geocode" 调用的方法,因为当我尝试创建 GeocodeEvent 的实例时,会引发 IllegalArgumentException,因为"source is null"
这里是测试方法
public void onGeocode(GeocodeEvent event) {
...
...
}
这里是部分堆栈跟踪
java.lang.IllegalArgumentException: null source
at java.util.EventObject.<init>(EventObject.java:56)
at javax.faces.event.FacesEvent.<init>(FacesEvent.java:72)
at javax.faces.event.BehaviorEvent.<init>(BehaviorEvent.java:71)
at javax.faces.event.AjaxBehaviorEvent.<init>(AjaxBehaviorEvent.java:73)
at org.primefaces.event.AbstractAjaxBehaviorEvent.<init>(AbstractAjaxBehaviorEvent.java:27)
at org.primefaces.event.map.GeocodeEvent.<init>(GeocodeEvent.java:30)
如何测试这个方法? 提前谢谢你
大家好,这里是使用 Mockito 的完整示例。事实上很明显...... :/
使用 Mockito,您可以使用以下内容模拟这两个参数
UIComponent mockUiComponent = Mockito.mock(UIComponent.class);
Behavior mockBehavior = Mockito.mock(Behavior.class);
在我的例子中,方法的其余部分如下所示:
sellerController.onGeocode(new GeocodeEvent(mockUiComponent,mockBehavior, "", null));
//Asserts for the case with null on last parameter
List<GeocodeResult> gResults = new ArrayList<>();
LatLng expectedLatLng = new LatLng(2d, 3d);
String expectedTitle = "via dei casari 1";
gResults.add(new GeocodeResult(expectedTitle, expectedLatLng));
gResults.add(new GeocodeResult("via dei casari 2",new LatLng(4d, 5d)));
gResults.add(new GeocodeResult("via dei casari 3",new LatLng(6d, 7d)));
sellerController.onGeocode(new GeocodeEvent(mockUiComponent,mockBehavior, "", gResults));
// Asserts for the case with a populated list
希望对你有用