簡體   English   中英

使用模擬測試 junit 的覆蓋率

[英]test junit for coverage with mock

對不起我的英語不好。 我對 junit 測試有疑問。 客戶要求覆蓋所有類,即使是 dto / model / entity (即使它是錯誤的,我也必須這樣做)。 但我在測試 getter 和 setter 時遇到了麻煩。 我無法覆蓋,我已經測試了許多解決方案,但是覆蓋率為 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() 需要一個必須是“模擬方法調用”的參數。 例如:when(mock.getArticles()).thenReturn(articles);

此外,可能會出現此錯誤,因為:

  1. 你存根其中之一:final/private/equals()/hashCode() 方法。 這些方法不能被存根/驗證。 不支持在非公共父類上聲明的 Mocking 方法。
  2. 在 when() 中,您不會在模擬上調用方法,而是在其他一些 object 上調用方法。 tks

二傳手不覆蓋。

新測試,覆蓋率 100%,但可以嗎?

公共 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。 Mockito 如果代碼中存在依賴關系(如數據庫 n all),我們將使用它。 在這種情況下,我們使用 Mockito 創建虛擬 object n 執行相關操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM