我想尝试springcloudcontract(scc),并创建了一个小项目see git。
我有额外的内置错误来测试scc。
但如果我负责这个项目 ./gradlew build
.
特定合同的测试将自动生成
建筑总是绿色的
有人能帮我吗?我希望这个疾病控制中心会失败。
谢谢。
这是我的合同:
package contracts.tse
import org.springframework.cloud.contract.spec.Contract
Contract.make {
label("order_placed")
input {
triggeredBy("sendAccepted()")
}
outputMessage {
sentTo("channel")
body(
orderId: "ddd",
)
headers {
header("type", "order-placed")
messagingContentType(applicationJson())
}
}
}
这是我的基类,已经有内置错误
@SpringBootTest(classes = TseBase.Config.class)
@AutoConfigureMessageVerifier
public class TseBase {
private static final String VALID_PERSONAL_ID = "86010197600";
private static final String INVALID_PERSONAL_ID = "86010156812";
@Autowired
private OrderRabbitMqEventPublisherImpl publisher;
public void sendAccepted() {
//FIXME: should fail, wrong orderId
publisher.publish(new OrderPlacedEvent("test_order_id"));
}
@Configuration
@ImportAutoConfiguration({ TestSupportBinderAutoConfiguration.class,
MessageCollectorAutoConfiguration.class, JacksonAutoConfiguration.class })
@EnableBinding(Source.class)
static class Config {
@Bean
OrderRabbitMqEventPublisherImpl publisher(Source source) {
return new OrderRabbitMqEventPublisherImpl(source);
}
}
}
下面是我的publisher的实现,其中已经有内置错误
// FIXME: should fail here
//@Component
public class OrderRabbitMqEventPublisherImpl implements OrderPublisher {
private final Source source;
public OrderRabbitMqEventPublisherImpl(final Source source) {
this.source = source;
}
@Override
public void publish(final OrderPlacedEvent orderPlacedEvent) {
Map<String, Object> headers = new HashMap<>();
headers.put("type", orderPlacedEvent.getClass().getName());
// FIXME: should fail here
// this.source.output().send(new GenericMessage<>(orderPlacedEvent,headers));
}
}
这是我生成的测试。
@SuppressWarnings("rawtypes")
public class TseTest extends TseBase {
@Inject ContractVerifierMessaging contractVerifierMessaging;
@Inject ContractVerifierObjectMapper contractVerifierObjectMapper;
@Test
public void validate_shouldSendAOrderPlacedEvent() throws Exception {
// when:
sendAccepted();
// then:
ContractVerifierMessage response = contractVerifierMessaging.receive("channel",
contract(this, "shouldSendAOrderPlacedEvent.yml"));
assertThat(response).isNotNull();
// and:
assertThat(response.getHeader("type")).isNotNull();
assertThat(response.getHeader("type").toString()).isEqualTo("order-placed");
assertThat(response.getHeader("contentType")).isNotNull();
assertThat(response.getHeader("contentType").toString()).isEqualTo("application/json");
// and:
DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload()));
assertThatJson(parsedJson).field("['orderId']").isEqualTo("ddd");
}
}
暂无答案!
目前还没有任何答案,快来回答吧!