日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了ArgumentCaptor在單元測試中的使用的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試為以下服務方法創(chuàng)建單元測試:

public CompanyDTO update(CompanyRequest companyRequest, UUID uuid) {

    final Company company = companyRepository.findByUuid(uuid)
            .orElseThrow(() -> new EntityNotFoundException("Not found"));            
    
    company.setName(companyRequest.getName());

    final Company saved = companyRepository.save(company);
    return new CompanyDTO(saved);
}

我創(chuàng)建了以下單元測試:

@InjectMocks
private CompanyServiceImpl companyService;

@Mock
private CompanyRepository companyRepository;

@Captor
ArgumentCaptor<Company> captor;



@Test
public void testUpdate() {
    final Company company = new Company();
    company.setName("Company Name");

    final UUID uuid = UUID.randomUUID();
    final CompanyRequest request = new CompanyRequest();
    request.setName("Updated Company Name");
  
    when(companyRepository.findByUuid(uuid))
        .thenReturn(Optional.ofNullable(company));        
    when(companyRepository.save(company)).thenReturn(company);

    CompanyDTO result = companyService.update(request, uuid);

    /* here we get the "company" parameter value that we send to save method 
    in the service. However, the name value of this paremeter is already 
    changed before passing to save method. So, how can I check if the old 
    and updated name value? */
    Mockito.verify(companyRepository).save(captor.capture());

    Company savedCompany = captor.getValue();

    assertEquals(request.getName(), savedCompany.getName());
}

據(jù)我所知,我們使用ArgumentCaptor來捕獲我們傳遞給方法的值。在本例中,我需要在正確的時間捕捉值,并比較發(fā)送到更新方法的名稱的更新值和更新后的名稱屬性的返回值。然而,我找不到如何正確地測試它,并在我的測試方法中添加必要的注釋。那么,我應該如何使用ArgumentCaptor來驗證我的UPDATE方法使用給定值(&QOOT;UPDATED Company NAME&QOOT;)更新公司。

推薦答案

以下是您的ArgumentCaptor方案。

測試中的代碼:

public void createProduct(String id) {
  Product product = new Product(id);
  repository.save(product);
}

請注意,a)我們在測試的代碼中創(chuàng)建了一個對象,b)我們想要驗證該對象的特定內容,c)我們在調用之后無法訪問該對象。這些情況幾乎就是你需要捕獲者的地方。

您可以這樣測試它:

void testCreate() {
  final String id = "id";
  ArgumentCaptor<Product> captor = ArgumentCaptor.for(Product.class);

  sut.createProduct(id);

  // verify a product was saved and capture it
  verify(repository).save(captor.capture());
  final Product created = captor.getValue();

  // verify that the saved product which was captured was created correctly
  assertThat(created.getId(), is(id));
}

這篇關于ArgumentCaptor在單元測試中的使用的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:ArgumentCaptor 單元 測試中
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定