我在设置JUnit测试中servlet中定义的系统属性时遇到了一个问题。我的servlet初始化如下所示:
public class MyServlet extends HttpServlet
{
private static final long serialVersionUID = 4306648703337839989L;
private static final String CLASS_NAME = MyServlet.class.getName();
public static final String PROPERTY_NAME = CLASS_NAME + ".myProperty";
private static final long DEFAULT_PROPERTY_VALUE = 120000;
private static final long PROPERTY_VALUE;
static
{
long propValue = DEFAULT_PROPERTY_VALUE;
final String propertyStr = java.lang.System.getProperty(PROPERTY_NAME);
if (propertyStr != null)
{
propValue = Long.parseLong(propertyStr);
}
PROPERTY_VALUE = propValue;
}
}
现在,我的JUnit测试将属性值设置为5000,如下所示:
@Test
public void testMyServlet()
{
java.lang.System.setProperty(MyServlet.PROPERTY_NAME, "5000");
<test>
}
当我运行测试时,静态最终字段"PROPERTY_value"的值被解析为120000,而不是5000。很明显,servlet初始化发生在测试之前,这就是为什么在测试可以设置系统属性之前,字段的值已经被解析为默认值的原因。我正在寻找绕过这一问题的建议,以便我的测试可以将系统属性设置为5000。
谢谢!
EDIT:解决方案
我可以通过两种方式将系统属性设置为5000来进行测试:
解决方案1:在测试类最顶部的静态块中设置系统属性。
public class MyTest
{
static
{
java.lang.System.setProperty("com.servlets.MyServlet.myProperty", "5000");
}
@Test
public void testMyServlet()
{
<my test>
}
}
解决方案2:在JUnit测试本身中设置系统属性,但使用属性键作为完整的规范名称。
public class MyTest
{
@Test
public void testMyServlet()
{
java.lang.System.setProperty("com.servlets.MyServlet.myProperty", "5000");
<my test>
}
}
我通过两种方式将系统属性设置为5000,从而使测试正常进行:
解决方案1:在测试类最顶部的静态块中设置系统属性。
public class MyTest
{
static
{
java.lang.System.setProperty("com.servlets.MyServlet.myProperty", "5000");
}
@Test
public void testMyServlet()
{
<my test>
}
}
解决方案2:在JUnit测试本身中设置系统属性,但使用属性键作为完整的规范名称。
public class MyTest
{
@Test
public void testMyServlet()
{
java.lang.System.setProperty("com.servlets.MyServlet.myProperty", "5000");
<my test>
}
}