У меня возникли трудности с попыткой издеваться над зависимостью в коллекции Guava.Spock Mock с коллекцией Guava
Давайте предположим, что у меня есть следующий код теста:
@Service
public final class ServiceA {
private final ServiceB serviceB;
@Autowired
public ServiceA(ServiceB serviceB) {
this.serviceB = serviceB;
}
public Collection<String> runAll(Collection<String> dataList) {
final ImmutableList.Builder<String> builder = ImmutableList.builder();
for (String data : dataList) {
builder.add(serviceB.run(data));
}
return builder.build();
}
}
Мой Спок Spec выглядит следующим образом:
class ServiceASpec extends Specification {
def serviceB = Mock(ServiceB.class)
def serviceA = new ServiceA(serviceB)
def "test"() {
when:
def strings = serviceA.runAll(['data1', 'data2'])
then:
1 * serviceB.run('data1') >> 'result1'
1 * serviceB.run('data2') >> 'result2'
0 * _._
strings == ['result1', 'result2']
}
}
Эта спецификация работает просто отлично, и делает то, что я хочу, чтобы это сделать ,
Тогда я переработан моя реализация использовать гуавы-х Collections2.transform(..)
: -
@Service
public final class ServiceA {
private final ServiceB serviceB;
@Autowired
public ServiceA(ServiceB serviceB) {
this.serviceB = serviceB;
}
public Collection<String> runAll(Collection<String> dataList) {
return Collections2.transform(dataList, new Function<String, String>() {
@Override
public String apply(final String input) {
return serviceB.run(input);
}
});
}
}
Когда я перезапускать свою спецификацию, я получаю эту ошибку: -
Too few invocations for:
1 * serviceB.run('data1') >> 'result1' (0 invocations)
Unmatched invocations (ordered by similarity):
None
Too few invocations for:
1 * serviceB.run('data2') >> 'result2' (0 invocations)
Unmatched invocations (ordered by similarity):
None
Мое мнение имеет что-то делать с насмешкой, потому что функция Guava будет выполняться только при использовании коллекции.
Однако я не был уверен, как реорганизовать мои спецификации, чтобы это работало.
Как я могу решить это? Благодарю.