junit期间如何通过StringResourceModel访问text_resources
How to access text_resources through StringResourceModel during junit
我正在构建 Wicket 1.6 应用程序。
在此我有一个参数 class 和一个 FillParameter class 来将 org.apache.wicket.PageParameters 转换为我自己的参数 class。参数 class 具有默认值(在创建过程中设置),FillParameter 具有我检查过的 min/max 值。作为 min/max 值的默认值都是使用 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行就是我上面提到的例子)
我一直在寻找问题的解决方案,但我只能找到关于如何在测试中读取资源的好例子 class,而不是如何使其在应用程序中工作class 被测试调用 class.
我希望我已经把我的问题说清楚了,希望有人能帮助我。我对 wicket 很陌生,但渴望学习。
问题:如何在使用 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);
}
我很确定问题出在你的 Mockito 规则中(when
):
when(localizer.getString(eq("bla.bla.bla.offset"), (Component)anyObject(), anyString())).thenReturn("0");
它与实际调用不匹配,因此后来的值为null
。
在这个区域玩。
我正在构建 Wicket 1.6 应用程序。
在此我有一个参数 class 和一个 FillParameter class 来将 org.apache.wicket.PageParameters 转换为我自己的参数 class。参数 class 具有默认值(在创建过程中设置),FillParameter 具有我检查过的 min/max 值。作为 min/max 值的默认值都是使用 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行就是我上面提到的例子)
我一直在寻找问题的解决方案,但我只能找到关于如何在测试中读取资源的好例子 class,而不是如何使其在应用程序中工作class 被测试调用 class.
我希望我已经把我的问题说清楚了,希望有人能帮助我。我对 wicket 很陌生,但渴望学习。
问题:如何在使用 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);
}
我很确定问题出在你的 Mockito 规则中(when
):
when(localizer.getString(eq("bla.bla.bla.offset"), (Component)anyObject(), anyString())).thenReturn("0");
它与实际调用不匹配,因此后来的值为null
。
在这个区域玩。