通过更改最终的静态变量来测试方法

时间:2016-07-27 21:01:12

标签: java unit-testing testing

我有一个受保护的方法,如下所示。它使用Constants.java文件中的最终静态变量。

class A {
    protected Configuration connectConfig() {
        ConfigDescriptor desc = new ConfigDescriptor.Builder()
            .project(Constants.REMOTE_CONFIG_PROJECT_NAME)
            .name(Constants.REMOTE_CONFIG_PROJECT_CONFIG_NAME)
            .version(Constants.REMOTE_CONFIG_PROJECT_VERSION)
            .build();

        return ConfigProvider.of(desc, getClass().getClassLoader());
    }

    public boolean process() {
        Configuration config = connectConfig();
        if(config == null) {
            return false;
        }
    }
}

现在,我想对process的方法remote config进行单元测试以使其失败。

如果我只是测试process()方法,它会通过,因为Constants.java具有正确的连接值。为了进行测试,我想更改这些值,以便远程配置returns null;

注意:我们不想使用Mockito来模拟值。

3 个答案:

答案 0 :(得分:1)

使用Mockito之类的模拟框架,您可以定义A的间谍,您可以在其中指定connectConfig()的结果:

A spy = spy(new A());
doReturn(null).when(spy).connectConfig();

Assert.assertFalse(spy.process());

答案 1 :(得分:1)

您可以尝试使用byteman更改常量值。它应该做的工作。

答案 2 :(得分:0)

使用模拟框架几乎总是这类问题的错误答案。改为使用依赖注入。