Code的不稳定部分

时间:2014-04-19 04:35:39

标签: java junit

我有一个未实例化的类,仅由静态方法组成。我设法覆盖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修饰符。你能建议一种方法来测试这个或者测试这个部分是没用的,或者这个类的设计可能有问题。

2 个答案:

答案 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 );
    }
}

现在,您可以通过调用新的重载来测试捆绑路径被破坏的场景,传递的是第二个参数所需的任何值。