我正在构建Wicket 1.6应用程序。
在这里我有一个Parameter类和一个FillParameter类来将org.apache.wicket.PageParameters转换为我自己的Parameter类。 Parameter类具有默认值(在创建期间设置),FillParameter具有我检查的最小/最大值。使用StringResourceModel从text_resource.properties文件加载默认值作为最小值/最大值。
示例(第15行):
private int offset = Integer.parseInt((new StringResourceModel("bla.bla.bla.offset", null)).getString());
到目前为止一切顺利。这在我的Wicket应用程序中运行良好。
现在我正在进行junit测试,我想测试我的FillParameters.class。这是我当前的FillParametersTest.class的片段:
private WicketTester wicketTester;
@Mock
Localizer localizer = mock(Localizer.class);
@Before
public void init() {
wicketTester = new WicketTester(MyApplication.class);
when(localizer.getString(eq("bla.bla.bla.offset"), (Component)anyObject(), anyString())).thenReturn("0");
wicketTester.getApplication().getResourceSettings().setLocalizer(localizer);
}
@Test
public void fillParametersGoodTest() {
PageParameters pageParameters = new PageParameters("pOffset=0");
Parameters parameters = FillParameters.fillParameters(pageParameters, parameters);
Assert.assertEquals(parameters.getOffset(), 0);
}
唉,这不行。测试似乎找到了资源,但它没有从该资源获取值,导致:
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:454)
at java.lang.Integer.parseInt(Integer.java:527)
at bla.bla.bla.Parameters.<init>(Parameters.java:15)
at bla.bla.bla.FillParametersTest.fillParametersGoodTest(FillParametersTest.java:63)
(参数中的第15行是我上面提到的例子)
我一直在寻找我的问题的解决方案,但我只能找到关于如何从测试类中的资源读取的好例子,而不是如何使它在测试调用的应用程序类中工作类。
我希望我能清楚地解决问题,并且有人可以帮我解决问题。我对检票口很新,但渴望学习。
问题:如何在使用StringResourceModel的junit测试期间阅读text_resources?
回答2015年2月27日
好的,所以我已经重构了我的整个应用程序,现在我已经让代码工作了,而且它实际上非常简单
private WicketTester wicketTester;
@Before
public void init() {
tester = new WicketTester(MyApplication.class);
}
@Test
public void fillParametersGoodTest() {
MockRequestParameters pageParameters = new MockRequestParameters();
pageParameters.addParameterValue("offset", "0");
FillParameters fp = new FillParameters();
Parameters parameters = fpo.fillParameters(pageParameters, parameters);
Assert.assertEquals(parameters.getOffset(), 0);
}
答案 0 :(得分:0)
我很确定问题出在您的Mockito规则中(when
):
when(localizer.getString(eq("bla.bla.bla.offset"), (Component)anyObject(), anyString())).thenReturn("0");
它与真实呼叫不匹配,因此后来值为null
。
在这个区域玩。