当前位置: 首页 > 知识库问答 >
问题:

JUnit测试:如何在不丢失分支的情况下测试如果语句?

呼延博易
2023-03-14

我已经在我的JUnit测试用例上运行了EclEmma,并且在一些测试用例上达到了100%。然而,对于覆盖率为82%或95%的分支,在我的代码旁边有一条消息说“错过了2个分支中的1个”,我似乎无法解决这个问题。

在查看了我的课程后,我注意到这条消息只出现在我的if语句旁边,这就是为什么我的测试没有被100%覆盖的原因。

我想我是在问是否有人知道如何在JUnit中测试if语句,这样就不会遗漏任何一个分支。

这是我试图测试的代码:

private double height;
    public void setHeight(double height){
        if(height <=0){
            this.height = 0;
        }
        else{
            this.height = height;
        }
    }//method close

(我正在使用JUnit 4)

共有2个答案

司英彦
2023-03-14

您的代码

public void setHeight(double height){
    if(height <=0){
        this.height = 0;
    }
    else{
        this.height = height;
    }
}

有两个可能的分支:

<代码>高度

public void setHeight(double height){
     this.height = 0;
}

<代码>高度

public void setHeight(double height){
    this.height = height;
}

因此,在if语句中,可以转到else中的一条或另一条语句。您必须创建两个单元测试来覆盖所有可能的方法-一个用于传递的参数<代码>高度

韩瀚
2023-03-14

简单:

您希望在被测方法中的每个路径都有一个不同的测试用例;比如:

  • testSetHeightWithNegativeValue()

它们中的每一个都为您的测试方法提供特定的输入,并检查预期的输出。

这里真正的收获是:考虑一下你的代码。您不应该需要覆盖率工具来判断您的方法需要更多的测试。相反:你看着你的方法,思考它在做什么;然后编写测试用例。

报道可以告诉你你做了正确的事;但是“做正确的事”是你自己应该努力去做的;而不是满足一些数字。

而且,正如评论所指出的:考虑使用TDD方法:当您在创建“匹配”的生产代码之前编写测试时,您将“思考”部分作为工作过程的基本元素。

 类似资料:
  • 我有一个项目结构: 我用mvn clean:install构建了它,并创建了jar文件。现在,我想使用命令行运行QbsApplicationTests。为此,我在一个目录中放入了两个罐子: 并执行以下命令: 然而,我不断得到以下错误 问题: 我应该如何从控制台运行QbsApplicationTests测试 编辑我还尝试添加以下内容: 到主类,但Intellij一直说无法解析。

  • 上下文:我想编译和测试一个多模块项目中的所有模块,但如果任何一个失败,编译或测试,我希望整个构建失败。 默认配置要么在第一次失败时停止,要么在测试失败后跳过模块 跑步: 在第一个失败的模块处停止。 如果添加: mvn clean Install-FAE//结束时失败 null 响应非常感谢-否则,如果有多个问题,我们必须在构建服务器上重复运行测试-消耗大量时间。

  • 我正在开发一个spring启动应用程序并编写一些junit测试。 但我发现,当我运行任何测试时,tomcat也会启动,这使得这些测试非常缓慢,浪费了很多时间。 当我开发一个SpringMvc应用程序时,junit测试可以在不启动tomcat的情况下运行,这节省了很多时间。 所以,我想问它在那里无论如何要运行启动tomcat的springstart测试?

  • 我有一个测试类,有几个测试,都通过了。如果我将该类添加到测试套件中,则所有测试都会失败。 原因是无法解决对JavaFX类型的依赖关系。我使用了一个初始化JavaFX框架(例如应用程序线程等)的测试规则,这似乎可以正常工作,正如通过的测试所表明的那样。由于异常,测试失败: 为什么JUnit的行为会因我运行测试的方式而异?我怎样才能解决这个问题?请注意,这并不是针对so的GUI测试(我不想模拟用户操作

  • 我们用Rest Assured和JUnit 5编写了API测试,并试图并行运行测试,因为测试之间没有依赖关系。我们已经尝试了JUnit 5的实验性并行执行,方法是设置: …但我们已经看到,通常当测试失败时,测试报告中不包含它们的输出。 这是已知问题吗?有什么变通方法吗?