如何解决Mockito 模拟如何返回在 void 方法中修改的输入参数
我在这里尝试了 2 种方法,第一种是 donothing(..)
用于设置一个输入参数的中间调用,这是有效的。
我想尝试的第二种方法是它是否可以返回/设置该输入 arg 但由于它是一个 void 方法,我对如何这样做有点困惑。我添加了一些试验作为评论,但希望得到一些教导和答案。
我要测试的方法是populateProfile(..)
public abstract class BaseA {
@Inject
protected BaseUtils baseUtils;
protected void populateProfile(Person person,final Profile profile) {
if (profile == null) {
return;
}
// THIS CALL
baseUtils.populateAddressHelper(person,profile);
Phone phone = profile.getPrimaryPhone() != null ? profile.getPrimaryPhone() : profile.getSecondaryPhone();
if (phone != null) {
person.setPhone(phone.getNumber());
}
Email email = profile.getEmail();
if (email != null) {
person.setEmail(email.getAddress());
}
}
}
Child class
public class Child extends BaseA {
...
}
BaseUtils class where the intermediary calls take place
@Component
class BaseUtils {
public void populateAddressHelper(Person person,final Profile profile) {
Address profileAddress = profile.getAddress();
if (profileAddress != null) {
String streetAddress = null;
if (profileAddress.getAddressLine1() != null) {
streetAddress = profileAddress.getAddressLine1();
if (profileAddress.getAddressLine2() != null) {
streetAddress += profileAddress.getAddressLine2();
}
}
SMAddress mainAddress = populateMainAddress(streetAddress,profileAddress.getCity(),profileAddress.getState(),profileAddress.getPostalCode(),profileAddress.getCountry());
person.setMainAddress(mainAddress);
}
}
public SMAddress populateMainAddress(final String streetAddress,final String city,final String state,final String postalCode,final String countryCode) {
SMAddress mainAddress = new SMAddress();
mainAddress.setAddress(streetAddress);
if (city != null) {
mainAddress.setSuburb(city);
}
if (state != null) {
mainAddress.setState(state);
}
if (postalCode != null) {
mainAddress.setPostcode(postalCode);
}
if (countryCode != null && !countryCode.isEmpty()) {
CountryCodeEnum codeEnum = CountryCodeEnum.valueOf(countryCode);
mainAddress.setCountry(codeEnum.getName());
}
return mainAddress;
}
}
Test for populateProfile(..)
@RunWith(MockitoJUnitRunner.class)
public class ChildTest extends BaseTest {
@Mock
private BaseUtils baseUtils;
@InjectMocks
Child child = new Child();
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void populateProfiletest() {
Person person = new Person();
UserData userData = createuserData();
Profile profile = userData.getBusinessProfile();
// SMAddress mainAddress = mock(SMAddress.class);
// doReturn(mainAddress).when(baseUtils).populateMainAddress(anyString(),anyString(),anyString());
donothing().when(baseUtils).populateMainAddressHelper(person,profile);
child.populateProfile(person,profile);
//assertEquals(profile.getAddress().getCity(),person.getMainAddress().getSuburb());
assertEquals(profile.getEmail().getAddress(),person.getEmail());
assertEquals(profile.getPrimaryPhone().getNumber(),person.getPhone());
//assertNotNull(person.getMainAddress());
verify(baseUtils,times(1)).populateMainAddressHelper(person,profile);
//verify(baseUtils).populateMainAddress(anyString(),anyString());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。