如何在junit期间通过StringResourceModel访问text_resources

时间:2015-02-16 13:37:22

标签: java junit wicket

我正在构建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);
}

1 个答案:

答案 0 :(得分:0)

我很确定问题出在您的Mockito规则中(when):

when(localizer.getString(eq("bla.bla.bla.offset"), (Component)anyObject(), anyString())).thenReturn("0");

它与真实呼叫不匹配,因此后来值为null。 在这个区域玩。