如何在void方法中获取对象值SUT Mockito

问题描述 投票:0回答:3

我正在寻找一种方法来获得我的测试中的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;
  }
java unit-testing junit mockito
3个回答
1
投票

一般来说,你做的是

@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
}

0
投票

你的toSave变量被声明为buys()方法的局部变量,所以一旦该方法完成它就会消失。您应该将toSave声明为包含buys()方法的类的私有实例变量,然后添加一个公共getter来返回该引用。


0
投票

您可以在方法之外声明List“toSave”(将其声明为类变量,而不是方法变量),然后使用getter来检索它。

© www.soinside.com 2019 - 2024. All rights reserved.