用mock测试junit的覆盖率



对不起我的英语。我对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");
}

总是出错,例如最后一次出现以下情况:when((需要一个参数,该参数必须是"对mock的方法调用"。例如:when(mock.getArticles(((.thenReturn(articles(;

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

  1. 您可以截尾以下任一方法:final/private/equals((/hashCode((。不能对的那些方法进行存根处理/验证。不支持在非公共父类上声明的模拟方法
  2. 在when((中,您不在mock上调用方法,而是在其他对象上调用方法。tks

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());
}

}

你不需要那么挣扎。第一个是简单的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 all(。在这种情况下,我们使用Mockito创建虚拟对象n执行相关操作。

最新更新