如何在void方法中获取对象值SUT Mockito
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在void方法中获取对象值SUT Mockito相关的知识,希望对你有一定的参考价值。
我正在寻找一种方法来获得我的测试中的List的值,我在我的SUT中有这个结构:
.//... A run method with logic that call this:
private void buys(){
List<GroupLin> gruposByEarly = this.earlys.stream().map(this::agruparCompras).filter(Objects::nonNull).collect(Collectors.toList());
List<MyClass> toSave = gruposByEarly.stream().flatMap(this::getToSave).map(this::valorar).collect(Collectors.toList());
this.writer.persist(toSave.stream());
}
我有一个像这样的测试:
@Test
public void runTest() {
//...when sentences
super.cvlTask.run(getStepRequest());
//...asserts
}
但我不知道如何看到'List toSave'对象,我尝试了这个:
when(entityWriter.persist(Mockito.any())).thenReturn(aMethodThatCallSUTGetMethodOfList);
但这样的事情不起作用,任何想法,因为在我的SUT中的逻辑运行之前,我尝试使用@Spy,但它有同样的问题
我也这样做了:
private List<ValoracionLin> toSave;
//...logic
//... A run method with logic that call this:
private void buys(){
List<GroupLin> gruposByEarly = this.earlys.stream().map(this::agruparCompras).filter(Objects::nonNull).collect(Collectors.toList());
this.toSave = gruposByEarly.stream().flatMap(this::getToSave).map(this::valorar).collect(Collectors.toList());
this.writer.persist(toSave.stream());
}
public List<MyClass> getToSave(){
return this.toSave;
}
在我的测试中:
when(entityWriter.persist(Mockito.any()))
.thenReturn(getValoracionesResultadoSUT());
private Integer getValoracionesResultadoSUT() {
this.valoracionesResultado = this.cvlTask.getToSave();
if(null!=this.valoracionesResultado)
return this.valoracionesResultado.size();
else
return 0;
}
答案
一般来说,你做的是
@Mock Writer writer;
@InjectMock MyService sut;
@Captor ArgumentCaptor<List<Data>> captor;
@Test
public void testSave() {
List<InputData> input = ...
sut.callMethod(input);
// check that write() was called on the writer
verify(writer).write(captor.capture());
// retrieve the value it was called with
List<Data> saved = captor.getValue();
// do some more validation on the data if necessary
}
另一答案
你的toSave
变量被声明为buys()
方法的局部变量,所以一旦该方法完成它就会消失。您应该将toSave
声明为包含buys()
方法的类的私有实例变量,然后添加一个公共getter来返回该引用。
另一答案
您可以在方法之外声明List“toSave”(将其声明为类变量,而不是方法变量),然后使用getter来检索它。
以上是关于如何在void方法中获取对象值SUT Mockito的主要内容,如果未能解决你的问题,请参考以下文章
如何从 - (void)touchesEnded:withEvent: 获取 UITouch 位置的 UIView 对象?