Java 不稳定的代码部分

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

我有一个没有实例化的类,它只由静态方法组成。我设法涵盖了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 );
    }

我想测试这样一个场景:路径中的字符串包将无效,它将通过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)在那里,这样以后如果它真的可以到达,它就很明显了。