#java #groovy #apache-storm #spock
#java #groovy #apache-storm #spock
Вопрос:
Итак, у меня есть следующий тест:
def "test execute(inputTuple) method emits an outputTuple containing a member ObjectType
retrieved using the entity_id in inputTuple"() {
given:
Tuple inputTuple = Mock(Tuple);
List<String> objectTypeIDsEmittedByPreviousBolt = new ArrayList<String>();
objectTypeIDsEmittedByPreviousBolt.add("member");
objectTypeIDsEmittedByPreviousBolt.add("1196");
1 * inputTuple.getValues() >> objectTypeIDsEmittedByPreviousBo<
when:
this.bolt.execute(inputTuple);
then:
1 * this.collector.emit(inputTuple, THE_OUTPUT_TUPLE);
1 * this.collector.ack(inputTuple);
}
И я получаю следующую ошибку, которую я не понимаю. Является ли inputTuple не совпадающим или outputTuple не соответствует?:
Too few invocations for:
1 * this.collector.emit( inputTuple, [['response':['status':'OK', ... 'member']]]]) (0 invocations)
Unmatched invocations (ordered by similarity):
1 * <OutputCollector>.emit(Mock for type 'Tuple' named 'inputTuple', [['response':['status':'OK', ...'member']]]])
at org.spockframework.mock.runtime.InteractionScope.verifyInteractions(InteractionScope.java:78)
at org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:76)
at member.bolt.CallConsoleAPIToGetAllObjectTypeInfoBoltTest.test execute(inputTuple) method emits an outputTuple containing a member ObjectType retrieved using the entity_id in inputTuple(CallConsoleAPIToGetAllObjectTypeInfoBoltTest.groovy:63)
Комментарии:
1. Можете ли вы предоставить минимальный рабочий пример? Без этого трудно сказать что-то, что имеет какой-либо смысл.
Ответ №1:
Вероятно, этот тест следует написать именно так (рабочий пример GroovyConsole):
@Grab('org.spockframework:spock-core:0.7-groovy-2.0')
@Grab('cglib:cglib-nodep:3.1')
import spock.lang.*
class Test extends Specification {
def "test execute(inputTuple) method emits an outputTuple containing a member ObjectType retrieved using the entity_id in inputTuple"() {
given:
List<String> objectTypeIDsEmittedByPreviousBolt = new ArrayList<String>();
objectTypeIDsEmittedByPreviousBolt.add("member");
objectTypeIDsEmittedByPreviousBolt.add("1196");
Tuple inputTuple = new Tuple(objectTypeIDsEmittedByPreviousBolt);
Bolt bolt = new Bolt()
Collector collector = GroovyMock(Collector)
bolt.collector = collector
when:
bolt.execute(inputTuple);
then:
1 * collector.ack(inputTuple);
}
}
class Bolt {
Collector collector = new Collector()
def execute(o) {
collector.ack(o)
}
}
class Collector {
def ack(o) {
println o
}
}
Комментарии:
1. Спасибо за принятие ответа и рад, что вы удовлетворены им. Я хотел бы также спросить, можете ли вы назначить начатую награду?
2. извините, Opal. Я думал, что это автоматически присудило ответ. Спасибо!