【问题标题】:How to increase the conditional coverage using jmockit for cobertura?如何使用 jmockit for cobertura 增加条件覆盖率?
【发布时间】:2014-04-19 13:53:29
【问题描述】:

我正在尝试使用 jmockit 增加以下方法的代码覆盖率 -

下面是我在 DataLogger 类中的方法,我正在尝试增加覆盖率 -

public void logDebug(final Object... objects) {
    if (m_logger.isDebugEnabled() && objects != null) {
        m_logger.debug(message(objects));
    }
}

下面是我的isDebugEnabled -

public boolean isDebugEnabled() {
    return m_logger.isDebugEnabled();
}   

如果我运行以下测试,我的 cobertura 覆盖率报告会以某种方式显示为 Conditional Coverage 25% [1/4]

@Test
public void testLogDebug() {
    DataLogger logger = DataLogger.getInstance(ClientTest.class);
    logger.logDebug(this);
    logger.logDebug();

    new MockUp<DataLogger>() {
        @Mock
        public boolean isDebugEnabled() {
            return true;
        }
    };

    logger.logDebug(this);

    new MockUp<DataLogger>() {
        @Mock
        public boolean isDebugEnabled() {
            return false;
        }
    };
    logger.logDebug(this);

    logger.logDebug((Object) null);
}

还有什么我应该做的吗?

【问题讨论】:

    标签: java unit-testing cobertura jmockit


    【解决方案1】:

    这个传递了一些正在为你创建的 Object[0]。

    logger.logDebug();
    

    这里可能缺少的可以调用

    logger.logDebug(null);
    

    isDebugEnabled 返回 true - 但我不确定 Cobertura 如何测量覆盖率(我自己使用 Emma)。

    我强烈建议您将其分成不同的较小测试,并使用有意义的名称,并检查它们究竟涵盖了您课程的哪一部分。

    在任何一种情况下都尝试调试以查看发生了什么。

    【讨论】:

    • @alijipa:感谢您的建议。我的问题中已经有logDebug(null) 测试。仍然没有全部覆盖。
    • 不,我的意思是在 isDebugEnabled=false 之前使用 null 进行测试,就像你的情况一样。无论哪种情况,请尝试使用其他工具,以确保您确实遗漏了某些内容,这不是由于外部问题(缓存的二进制文件、缓存的报告文件等)。
    • 实际上,我只需要使用 cobertura,因为这就是我们所关注的。 :(
    • 请再检查一次我的回答。我认为问题正如我所提到的,因为您在 isDebugEnabled=true 和 objects=null 时没有测试 logDebug() - 您只使用 isDebugEnabled=false 测试 objects=null。
    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2014-05-30
    • 2013-05-28
    • 2011-04-11
    相关资源
    最近更新 更多