如何在junit测试中抑制/绕过静态方法?

时间:2015-08-05 15:55:28

标签: java junit static mockito suppress

我们说我有以下代码:

protected int returnFourtyTwo() {
    evilMethod(new Object, "");
    return 42;
}

protected static void evilMethod(Object obj, String string) {
    throw new RuntimeException("This is me being evil.");
}

我尝试做的是运行我的returnFourtyTwo()方法,而不会在单元测试中抛出运行时异常。我之前能够使用suppress()方法绕过类构造函数,但这是我第一次不得不绕过静态方法(带有多个参数)静态类。不幸的是,关于这个主题的资源有点稀缺。

3 个答案:

答案 0 :(得分:1)

唯一的出路是模拟静态方法,如@Dave所述。你可以用PowerMock做到这一点。

请参阅Mocking static methods with Mockito

答案 1 :(得分:0)

根据实际方法实现的复杂程度,您可以将返回调用与异常抛出分开 - 然后在不会抛出异常的返回调用上进行测试。在很多情况下,如果像42这样的奇怪的整体有自己的变量来解释它对应的东西也是最好的 - 如果总是 42,那么它是静态的最后。

这就是我在这里针对你的具体情况做的事情,但我猜这是你实际问题的一个主要简单抽象,所以你可能仍然想按照之前的建议去模拟它。

static final int theAnswerToLife = 42;

protected int returnFourtyTwo() {
    evilMethod(new Object, "");
    return getTheAnswerToLife();
}

protected int getTheAnswerToLife() {
    return theAnswerToLife;
}

protected static void evilMethod(Object obj, String string) {
    throw new RuntimeException("This is me being evil.");
}

答案 2 :(得分:-2)

简单来说,您可以将@Ignore注释用于您的方法。