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。 在这个区域玩。