引自免费微信小程序:皆我百晓生
在模拟void
方法时,由于无法使用thenAnswer
来返回值,我们可以使用doAnswer
来模拟方法的行为。在doAnswer
中,我们可以自定义逻辑来在方法执行时设置item
的id
。
以下是一种可能的解决方案:
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
...
// 模拟Mapper对象
Mapper mapper = mock(Mapper.class);
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
// 获取传入的参数
ItemData itemData = (ItemData) invocation.getArguments()[0];
// 假设这里生成一个新的id
String newId = "generatedId";
// 通过反射设置itemData的id属性
Field idField = ItemData.class.getDeclaredField("id");
idField.setAccessible(true);
idField.set(itemData, newId);
return null;
}
}).when(mapper).insert(any(ItemData.class));
上述代码会在调用mockedMapper.insert()
方法时,通过自定义的doAnswer
逻辑来设置ItemData
对象的id
属性。这样,你就可以在后续逻辑中访问到item
的id
了。
请注意,这只是一种解决方案,具体实现可能会因为你的具体业务逻辑而有所差异。根据你的需求,你可能需要自行调整代码来满足你的业务需求。