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

用mock测试junit的覆盖率

赵鸿畴
2023-03-14

对不起我的英语。我对junit测试有问题。客户机要求覆盖所有类,即使是dto/model/entity(即使是错误的,我也必须这样做)。但我在测试getter和setter时遇到困难。我无法覆盖,我已经测试了许多解决方案,但要么覆盖率为0,要么出现错误,我该怎么办?

我的班级:

@Entity
 public class AnagrafeUser {

private String firstName; 
private String lastName; 

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
} }

我的班级测试

public class AnagrafeUserTest {

@InjectMocks
private AnagrafeUser anagrafeUser;

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

@Test
public void setanagrafeUser() throws Exception {
    when(anagrafeUser.getFirstName()).thenReturn("fistname");
    when(anagrafeUser.getLastName()).thenReturn("lastName");

    anagrafeUser.setFirstName("fistname");
    anagrafeUser.setLastName("lastName");
}

always error,例如last when:when()需要的参数必须是“模拟的方法调用”。例如:when(mock.getArticles())。返回(物品);

此外,出现此错误的原因可能是:

  1. 您可以存根:final/private/equals()/hashCode()方法。这些方法无法存根/验证。不支持对非公共父类声明的模拟方法

setter没有覆盖。

新测试,覆盖率100%,但可以吗?

公共类AnagrafeUserTest{

@InjectMocks
private AnagrafeUser anagrafeUser;

Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
    anagrafeUser.setFirstName("a");
    anagrafeUser.setLastName("a");
    anagrafeUser.setUserCode("a");
}

Test
public void setanagrafeUser() throws Exception {
    assertNotNull(anagrafeUser.getFirstName());
    assertNotNull(anagrafeUser.getLastName());
    assertNotNull(anagrafeUser.getUserCode());
}

}

共有1个答案

龚苏燕
2023-03-14

你不需要挣扎那么多。首先是简单的POJO类。因此,您可以使用提供断言方法的断言类,这对于编写测试用例非常有用。

public void AnagrafeUserTest{

AnagrafeUser anagrafeUser = new AnagrafeUser();

@Test
public void setanagrafeUser(){
anagrafeUser.setFirstName("Harry");
anagrafeUser.setLastName("jackson");
Assert.assertEquals("Harry",anagrafeUser.getFirstName());
Assert.assertEquals("jackson",anagrafeUser.getLastName());
}}

我永远不会建议您在这里使用Mockito,因为这只是基本的POJO类。如果代码中存在依赖项(如数据库n all),则使用Mockito。在这种情况下,我们使用Mockito创建虚拟对象并执行相关操作。

 类似资料:
  • 本节介绍与JUnit Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 JUnit Mock Test I 问题1 - 以下哪项描述正确测试? A - 测试是检查应用程序功能的过程,是否按照要求运行。 B - 测试是单个实体(类或方法)的测试。 C - 以上两者。 D - 以上都

  • 11.3. 测试覆盖率 就其性质而言,测试不可能是完整的。计算机科学家Edsger Dijkstra曾说过:“测试能证明缺陷存在,而无法证明没有缺陷。”再多的测试也不能证明一个程序没有BUG。在最好的情况下,测试可以增强我们的信心:代码在很多重要场景下是可以正常工作的。 对待测程序执行的测试的程度称为测试的覆盖率。测试覆盖率并不能量化——即使最简单的程序的动态也是难以精确测量的——但是有启发式方法

  • 我有这两种方法,在使用Mock实现测试时遇到了困难。我该如何参加考试? 我有麻烦得到Jboss目录而不必启动System.get属性(jboss.server.temp.dir);

  • 当我通过这个示例类模拟和运行测试时,mockito跳过了静态部分,这是有意义的,因为我模拟了HARD_CACHE的值,但同时我希望代码100%覆盖。静态字段应该在没有模拟的情况下测试吗?或者有没有一种方法可以使用模拟测试静态字段/方法/变量?

  • 决策覆盖技术属于白盒测试,它为布尔值提供决策覆盖。此技术报告布尔表达式的真/假结果。每当语句中有两个或多个结果的可能性时,如while语句,if语句和case语句(控制流语句),它被视为决策点,因为有两个结果为或。 决策覆盖率通过使用控制流图或图表涵盖代码的每个布尔条件的所有可能结果。 通常,决策点有两个决策值,一个是,另一个是,这就是为什么大多数时候结果总数是2的原因。决策覆盖率的百分比可以通过

  • 语句覆盖是广泛使用的软件测试之一。它来自白盒测试。 语句覆盖技术用于设计白盒测试用例。该技术涉及至少执行一次源代码的所有语句。它用于计算源代码中源代码中执行的语句总数。 语句覆盖在白盒测试过程中得出测试用例的场景,该过程基于代码的结构。 在白盒测试中,测试人员的专注点是内部源代码和流程图或代码流程图的工作。 通常,在内部源代码中,有各种各样的元素,如运算符,方法,数组,循环,控制语句,异常处理程序