Warm tip: This article is reproduced from serverfault.com, please click

java-用模拟测试junit的覆盖率

(java - test junit for coverage with mock)

发布于 2020-11-28 23:12:08

对不起我的英语不好。我对junit测试有问题。客户要求覆盖所有类,甚至是dto / model / entity(即使是错误的,我也必须这样做)。但是我在测试吸气剂和吸气剂时遇到了麻烦。我不能涵盖,我已经测试了许多解决方案,但是覆盖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");
}

总是错误,例如最后一个错误:when()需要一个参数,该参数必须是“模拟的方法调用”。例如:when(mock.getArticles())。thenReturn(articles);

同样,由于以下原因,可能会出现此错误:

  1. 你存根以下方法之一:final / private / equals()/ hashCode()方法。这些方法不能存根/验证。不支持在非公共父类上声明的模拟方法。
  2. 在when()内部,你不会在模拟对象上调用方法,而是在其他一些对象上调用方法。ks

二传手不覆盖。

新测试,覆盖率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());
}

}

Questioner
qwerty98
Viewed
11
priyranjan 2020-11-29 11:31:02

你无需为此付出太多努力。首先,这是简单的POJO类。因此,你可以使用为你提供断言方法Assert类,该类对于编写测试用例很有用。

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类。如果代码中有依赖项,我们将使用Mockito(例如,数据库n全部)。在那种情况下,我们使用Mockito创建虚拟对象n执行相关的操作。