我有一个未实例化的类,仅由静态方法组成。我设法覆盖getProperty()的所有部分,除了catch(IOException e)部分,但代码似乎无法访问。
public class ResourceUtils
{
private static final String IOEXCEPTION_ERROR_MESSAGE = "ERROR: Problem reading StringBundles.properties";
private static final String PATH_STRING_BUNDLE = "com/qn/config/StringBundles.properties";
public static String getProperty( String key )
{
Properties property = new Properties();
try
{
property.load( ResourceUtils.class.getClassLoader().getResourceAsStream( PATH_STRING_BUNDLE ) );
}
catch( IOException e )
{
System.err.println( IOEXCEPTION_ERROR_MESSAGE );
e.printStackTrace();
return null;
}
return property.getProperty( key );
}
我想测试PATH_STRING_BUNDLE无效的情况,并且它通过catch(IOException e)传递。但是PATH_STRING_BUNDLE有一个final修饰符。你能建议一种方法来测试这个或者测试这个部分是没用的,或者这个类的设计可能有问题。
答案 0 :(得分:0)
在单元测试中,暂时重命名文件com/qn/config/StringBundles.properties
,然后运行代码。测试完成后,将其重命名。
答案 1 :(得分:0)
在这种情况下,我通常会介绍使用这个直接的解决方案(这里也是一个更清晰的解决方案,但它需要更广泛的重构):我创建了一个新的方法重载,它需要一个额外的参数,并使用此参数PATH_STRING_BUNDLE
常数的位置。然后我更改原始方法,使其只是将PATH_STRING_BUNDLE
传递给新的重载。这是代码的样子:
import java.io.IOException;
import java.util.Properties;
public class ResourceUtils
{
private static final String IOEXCEPTION_ERROR_MESSAGE = "ERROR: Problem reading StringBundles.properties";
private static final String PATH_STRING_BUNDLE = "com/qn/config/StringBundles.properties";
public static String getProperty(String key) {
return getProperty(key, PATH_STRING_BUNDLE);
}
static String getProperty(String key, String bundlePath)
{
Properties property = new Properties();
try
{
property.load(ResourceUtils.class.getClassLoader().getResourceAsStream(bundlePath));
}
catch( IOException e )
{
System.err.println( IOEXCEPTION_ERROR_MESSAGE );
e.printStackTrace();
return null;
}
return property.getProperty( key );
}
}
现在,您可以通过调用新的重载来测试捆绑路径被破坏的场景,传递的是第二个参数所需的任何值。