测试 junit 的覆盖范围

test junit for coverage with mock

对不起我的英语。 我对 junit 测试有疑问。 客户要求覆盖所有classes,甚至是dto/模型/实体(即使是错误的,我也必须这样做)。 但我在测试吸气剂和 setters 时遇到了麻烦。 我无法覆盖,我已经测试了很多解决方案,但覆盖率为 0 或错误,我该怎么办?

我的class:

@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;
} }

我的class测试

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() 需要一个必须为 'a method call on a mock' 的参数。 例如: 当(mock.getArticles()).thenReturn(文章);

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

  1. 您对以下任一方法存根:final/private/equals()/hashCode() 方法。 那些方法不能是stubbed/verified。 不支持在非 public 父 classes 上声明的模拟方法。
  2. 在 when() 内部,您不会在 mock 上调用方法,而是在其他一些对象上调用方法。 tks

setter未覆盖。

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

public class 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 class。因此您可以使用 Assert class 为您提供断言方法,这对编写测试用例很有用。

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