Java Unit测试返回参数对象

时间:2015-12-16 03:30:07

标签: java unit-testing junit

我有一个测试用例,试图测试对象的更新是否成功。

尝试更新的代码是

@Override
public Company updateCompany(Long id, Company company) {

    Company existCompany = companyRepository.findOne(id);
    // doing something here to apply the values from company to existCompany

    return companyRepository.save(existCompany);
}

用于测试用例

@Test
public void testUpdateCompany() throws Exception {
    Company company = new Company("westpac", "www.westpac.com.au");
    Company existCompany = new Company("westpac", "www.westpac.com");

    when(companyRepository.findOne(anyLong())).thenReturn(existCompany);

    Company newCompany = companyService.updateCompany(1L, company);

    assertEquals(newCompany.getUrl(), "www.westpac.com.au");
}

因为我没有模拟companyRepository.save(existCompany);的返回值,这将测试失败。

我的问题是:

有没有办法可以模拟返回值与companyRepository.save(existCompany)的args完全相同?

1 个答案:

答案 0 :(得分:2)

您可以使用Mockito.verify方法检查对companyRepository.save方法的预期调用。类似的东西:

verify(companyRepository).save(existCompany);

在这种情况下,公司应该有正确的equals和hashCode方法

另一种选择是使用ArgumentCaptor:

ArgumentCaptor<Company> argument = ArgumentCaptor.forClass(Company.class);
verify(companyRepository).save(argument.capture());
assertEquals(argument.getValue().getUrl(), --what you expect--);