http:outbound-gateway
Spring Integration ワークフローで最適な単体テストを行う方法を見つけようとしています。
ゲートウェイは次のようになります。
<int-http:outbound-gateway id="gateway"
request-channel="registrationQueue"
message-converters="jsonMessageConverter"
url-expression="@urlGenerator.resolve()"
http-method="POST"
expected-response-type="javax.ws.rs.core.Response"
reply-channel="nullChannel"
error-handler="httpResponseErrorHandler"/>
具体的には、..
- 送信されるオブジェクトのシリアル化をアサートします。は
message-converters
からのメッセージを正しく処理しますrequest-channel
か? - サードパーティ サービスからの応答処理を確認します。さまざまな応答 (予期されるものと予期しないもの) とエラー (内部と外部) が与えられた場合の動作は何ですか?
エンドポイントを模擬し、統合ワークフローのステップが期待どおりに動作することをアサートする多くの単体テストがあります。次のようなもの:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:test-config.xml"})
public class FileRegistrationWorkflowTest {
...
@Autowired
private MessageChannel fileFoundChannel;
@Autowired
private QueueChannel testRegistrationQueue;
...
@Test
public void shouldQueueRegistrationForFileWithEntityId() {
// Given
mockFileLookupService(FILE_ID, FILENAME_WITH_ENTITY_ID);
// When
fileFoundChannel.send(MessageBuilder.withPayload(FILE_ID).build());
// Then
Message<?> message = testRegistrationQueue.receive();
assertThat(message, hasPayload(expected));
}
}
このテスト方法は、ワークフローに沿ったステップに最適です。問題は、エンド ポイント ゲートウェイのテストです。
- をモックできないので
http:outbound-gateway
、テストしていません。 - 対話するために実際の HTTP サービスをデプロイしたくはありません。これは統合テストです。
- サードパーティ サービスは によってのみ解決されるため
url-expression
、モック アウトする Spring Bean はありません。
おそらく、Spring が送信しようとする HTTP リクエストを傍受できるでしょうか?