如何测试 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

希望对你有用