Java 不稳定的代码部分
我有一个没有实例化的类,它只由静态方法组成。我设法涵盖了getProperty()的所有部分,除了catch(IOException e)部分,但是代码似乎无法访问Java 不稳定的代码部分,java,junit,Java,Junit,我有一个没有实例化的类,它只由静态方法组成。我设法涵盖了getProperty()的所有部分,除了catch(IOException e)部分,但是代码似乎无法访问 public class ResourceUtils { private static final String IOEXCEPTION_ERROR_MESSAGE = "ERROR: Problem reading StringBundles.properties"; private static final
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 );
}
我想测试这样一个场景:路径中的字符串包将无效,它将通过catch(ioe异常)。但是,路径字符串束有一个最终修饰符。您能否建议一种方法来测试这个部分,或者测试这个部分非常无用,或者类的设计有问题。在单元测试中,暂时重命名文件
com/qn/config/StringBundles.properties
,然后运行代码。测试完成后,将其重新命名。在这种情况下,我通常会引入使用此即时解决方案(还有一个更干净的解决方案,但需要更广泛的重构):我创建一个新的方法重载,它需要一个额外的参数,并使用此参数代替路径字符串束
常量。然后,我更改了原始方法,使其只将PATH\u STRING\u 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 );
}
}
现在,您可以通过调用新的重载来测试捆绑路径被破坏的场景,该重载传递第二个参数所需的任何值。如果它确实不可访问,那么我将放置类似于
throw new AssertionError(e)代码>在那里,这样以后如果它真的可以到达,它就很明显了。