测试 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(文章);
此外,此错误可能会出现,因为:
- 您对以下任一方法存根:final/private/equals()/hashCode() 方法。
那些方法不能是stubbed/verified。
不支持在非 public 父 classes 上声明的模拟方法。
- 在 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 执行相关操作。
对不起我的英语。 我对 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(文章);
此外,此错误可能会出现,因为:
- 您对以下任一方法存根:final/private/equals()/hashCode() 方法。 那些方法不能是stubbed/verified。 不支持在非 public 父 classes 上声明的模拟方法。
- 在 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 执行相关操作。