私はBraintree PaymentsのJava API(執筆時点ではバージョン2.71.0)に基づいて支払いゲートウェイを作成しています。Braintree Java APIの周りに意味のある単体テストを書く方法を教えてください。
私はBraintreeに送信するリクエストに正しいパラメータが設定されていることを確認するための単体テストを作成したいと思います。しかし、Java APIによって公開されるオブジェクトは書き込み専用であるようです。
Braintreeサンドボックスの利用可能性に応じて私の自動テストを行うことは望ましくないことに注意してください。フレークなシステムテストではなく、堅牢な単体テストを作成したいと思います。完璧な世界では
、私は(MockitoとAssertJを使用して)このような何かを書くことができるようにしたいと思います:
BraintreeGateway mockGateway = Mockito.mock(BraintreeGateway.class);
TransactionGateway transactionGateway = Mockito.mock(TransactionGateway.class);
Result<Transaction> mockResult = (Result<Transaction>) Mockito.mock(Result.class);
BigDecimal totalAmount = BigDecimal.valueOf(1234, 2);
String customerId = "some-customer-id";
Mockito.when(mockGateway.transaction()).thenReturn(transactionGateway);
Mockito.when(transactionGateway.sale(any())).thenReturn(mockResult);
underTest.performTransaction(totalAmount, customerId);
ArgumentCaptor<TransactionRequest> reqCaptor = ArgumentCaptor.forClass(TransactionRequest.class);
Mockito.verify(transactionGateway).sale(reqCaptor.capture());
TransactionRequest sentRequest = reqCaptor.getValue();
Assertions.assertThat(sentRequest.getAmount()).isEqualTo(totalAmount);
Assertions.assertThat(sentRequest.getCustomer().getId()).isEqualTo(customerId);
ああ、私はsentRequest
に乗るだけの方法がセッターです。
回避策として、私はBraintree APIによって送信されたHTTPリクエストをより深く捉えようと試みることができますが、それはほとんど読めなくなり、(もう一度)非常に薄れてしまうでしょう。
もっと良いアイデアですか?
は私のポイントを作ってくれてありがとう:私たちは残りのモックやスタブを提供することができるため、BTのAPI周りのラッパーを書きましたシステムのしかし、私は最後のマイル(少なくとも私たちの側)を目指しています:我々がBTに渡すものが、生産に一度期待される行動を与えるものであることをテストします。 – Mithfindel
ええと、私はそれに答えたと思います。インターフェイスの背後にAPIをラップしているので、実際の実装でインターフェイスをテストできます。そのインターフェースはあなたが使用するすべての機能を提供するので、そのテストケースを持ち、対応するバックエンドを使ってどこでも実行することができます...上記のように、テストケースを出荷/ビルドチェーンのどこにでも置くことができます。テストデプロイメントの前に...または何が欠けていますか? – slowy