Как получить значение объекта в пустом методе SUT Mockito - PullRequest
0 голосов
/ 28 февраля 2019

Я ищу способ получить значение 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;
  }

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Вы можете объявить List «toSave» вне метода (объявить его как переменную класса, а не как переменную метода), а затем использовать метод получения для его извлечения.

0 голосов
/ 01 марта 2019

В общем, что вы делаете, это

@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 голосов
/ 28 февраля 2019

Ваша переменная toSave объявлена ​​локальной для метода buys(), поэтому она исчезает, как только этот метод завершает работу.Вы должны объявить toSave как частную переменную экземпляра класса, содержащего метод buys(), а затем добавить публичный метод получения для возврата этой ссылки.

...