JMockit MockUp用于具有私有类参数的方法

时间:2015-02-28 11:02:04

标签: java junit jmockit

我正在使用JUnit和JMockit编写一些单元测试,需要为一个以私有枚举实例作为参数的方法编写JMockit MockUp。这是我需要模拟的类:

public class Result {
    //Static constants representing metrics
    public static final Metric AVOIDABLE = Metric.avoidable;
    public static final Metric UNAVOIDABLE = Metric.unavoidable;

    // private enumeration of metric values
    private enum Metric {avoidable, unavoidable};

    public Long getTodayCount(Metric metric) { //<- instance of private enum
        return getValueForKey(metric);
    }
}

取决于具体的Metric,我需要返回不同的Long值。如果Metric枚举是公开的,那就足够直截了当了。类似的东西:

private static class MockResult extends MockUp<Result> {
    @Mock
    Long getTodayCount(Metric m){ //<-- nope. Metric is private
        if(Result.AVOIDABLE.equals(m)){ //<-- can't call equals either
            return 1234L;    
        } else {
            return 4567L;
        }
    }
}

但是,由于Metric是私有的,除了将Metric更改为公开之外,还有什么方法可以实现这一目标吗?这可能最终成为实现这一目标的唯一方法,但我不是Result课程的作者,并且我并不完全熟悉将Metric私有化的原因。

1 个答案:

答案 0 :(得分:2)

根据文件:

  

@Mock注释标记了模型类中的那些方法,这些方法旨在为模拟类中的相应方法(相同签名)提供模拟实现。

如果枚举是私有的,则不能在单元测试中使用它,因为它在课堂外不可见。那么你就无法定义一个合适的MockUp。

您必须让Metric课程更加明显(至少包私有)或模拟整个Result课程。