【问题标题】:test junit for coverage with mock用 mock 测试 junit 的覆盖率
【发布时间】:2020-11-28 23:12:08
【问题描述】:

对不起我的英语。 我对junit测试有疑问。 客户要求覆盖所有类,即使是 dto/模型/实体(即使它是错误的,我也必须这样做)。 但我在测试 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");
}

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

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

  1. 您存根以下任一方法:final/private/equals()/hashCode() 方法。 这些方法不能被存根/验证。 不支持在非公共父类上声明的模拟方法。
  2. 在 when() 中,您不会在模拟上调用方法,而是在其他对象上调用方法。 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());
}

}

【问题讨论】:

  • 为什么要在这里使用模拟?只需set 一个值并断言get 返回值?
  • 有一个真实的例子吗?没有错?
  • 这是您正在测试的实际类/“逻辑”,这里没有要模拟的外部依赖项。所以不用mock直接使用也没有错。
  • 有趣,tks。而且这也不正确(我对注入/模拟/模拟豆有困难)?添加问题
  • 您应该断言实际值本身(即 assertEquals),而不仅仅是不为空。这样,您就真正在测试“行为”,即set 设置值,get 不加任何更改地返回它。

标签: java spring testing junit mockito


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多