1

私の質問は、テスト用の NserviceBus Handler の DI ( Handler ) に関する質問に似ています。解決策として、次の構文を使用してコンストラクター インジェクションを使用できます。

Test.Handler<YourMessageHandler>(bus => new YourMessageHandler(dep1, dep2))

Saga のテストに同じアプローチを使用する方法が見つかりませんでした。次のようなプロパティ注入のサポートがあります。

var saga = Test.Saga<MySaga>()
            .WithExternalDependencies(DependenciesSetUp);
private void DependenciesSetUp(MySaga saga)
    {
        saga.M2IntegrationService = M2IntegrationService.Object;
        saga.ProcessLogService = ProcessLogService.Object;
        saga.Log = Log.Object;
    }

ただし、このアプローチでは、依存関係をパブリック プロパティにする必要があります。そして、それを避けたいと思っています。

Saga テストに構築依存性注入を使用する方法はありますか?

4

2 に答える 2

1

これは次のように回避できます。

(必須のデフォルトの空のコンストラクターに加えて) パラメーターを持つコンストラクターを持つ saga を用意します。

テストは次のようになります。

Test.Initialize();
var injected = new InjectedDependency() {Id = Guid.NewGuid(), SomeText = "Text"};
var testingSaga = new MySaga(injected);
var saga = Test.Saga(testingSaga);
saga.WhenReceivesMessageFrom("enter code here")

これはうまくいきますか?

于 2015-10-14T15:57:51.127 に答える
1

はい、それもサポートされています:

        var saga = new MySaga(new MyFirstDep(), new MySecondDep());

        Test.Saga(saga)
            .ExpectSend<ProcessOrder>(m => m.Total == 500)
            .ExpectTimeoutToBeSetIn<SubmitOrder>((state, span) => span == TimeSpan.FromDays(7))
            .When(s => s.Handle(new SubmitOrder
            {
                Total = 500
            }));
于 2015-10-14T23:39:16.900 に答える