最初の支払いが成功し、2回目の支払いが失敗したときに最初の支払いをロールバックする必要があるユニットテストケースを作成しています。ユニットテストコードは次のようになります。MOQを使用して異なる返品で同じメソッドを複数回呼び出す
- 最初の支払いが正常に処理されます。
- 2番目のお支払いを処理します。外部システムは、同様のトランザクションフォールト例外をスローします。同様のトランザクション障害例外を解析してexceptionidを取得し、例外IDを使用して2番目のトランザクションを再度処理します。
- 2番目のトランザクションが実際に処理されると、システムは「支払いが失敗しました」という例外を返します。
- システムは、最初の支払いを無効にする必要があります。
私は(1)のユニットテストを書いています。どのようにSOコミュニティは、パート2、3、4の世話をする方法についての指針を持っていますか?
[TestMethod]
public void IfTheSecondPaymentFailsThenTheFirstPaymentShouldBeVoided()
{
//Arrange
var iPaymentMock = new Mock<IPaymentMock>();
var paymentSpecificationResponse = new PreregisteredAccountSpec();
iPaymentMock.Setup(
counter => counter.ProcessPayment
(
It.IsAny<Context>(),
It.IsAny<PreregisteredAccountSpec>(),
It.IsAny<Guid>())
).
Returns(paymentSpecificationResponse);
//Act
var twoPaymentProcessor = new TwoPaymentProcessor(iPaymentMock.Object);
twoPaymentProcessor.Submit();
//assert
iPaymentMock.Verify((
counter => counter.ProcessPaymentSpecification
(
It.IsAny<Context>(),
It.IsAny<PreregisteredAccountSpec>(),
It.IsAny<Guid>()
)
), Times.Once());
}
SetUpSequenceでlambdaを使用することはできません。これが機能するかどうかは不明です。 –