ServiceFabricアプリケーションクラスのUnitTestの記述

Dec 16 2020

Service FabricApplicationクラスの単体テストを作成しています。修正方法がわからないエラーが発生しています。クラス定義は次のようなものです。

namespace SearchService
{
    internal sealed class SearchServiceClass : StatelessService
    {
        //variables defined followed by constructor
        private string jsonStr;
        public SearchServiceClass(StatelessServiceContext context)
            : base(context)
        {
            //constructor stuff
        }
        
        public bool IsDataJsonLoaded
        {
            get
            {
                return !(jsonStr == null);
            }
        }
    }
}

アプリケーションには、次のように定義されたテストクラスがあります。

namespace SearchService.Tests
{
    //[TestClass]
    public class SearchServiceClassTest
    {
        [Fact]
        public void SearchServiceClassConstructor()
        {
           var searchServiceClass = new SearchServiceClass();
           Assert.True(searchServiceClass.IsDataJsonLoaded);
        }
    }
}

次のエラーが発生します。

'SearchServiceClass.SearchServiceClass(StatelessServiceContext)'の必須の仮パラメーター 'context'に対応する引数は指定されていません。

誰かがこれを修正する方法を教えてもらえますか?

編集:私はServiceFabric.Mocksを見てきました。私が理解しているのはMockStatelessServiceContextFactory.Default、モックコンテキストを作成するためにを使用する必要があるということです。これを行うにはどうすればよいですか、次は正しい方法ですか?:

var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);

回答

1 LoekD Dec 16 2020 at 18:46

はい、ServiceFabric.Mocksライブラリを使用して、次のコードを使用してサービスのテストインスタンスを作成できます。

var serviceInstance = new SearchServiceClass(MockStatelessServiceContextFactory.Default);

Defaultコンテキストの代わりに、カスタマイズされたインスタンスを作成することもできます。

var newUri = new Uri("fabric:/MockApp/OtherMockStatelessService");
var serviceTypeName = "OtherMockServiceType";
var partitionId = Guid.NewGuid();
var replicaId = long.MaxValue;
var context = new MockCodePackageActivationContext("fabric:/MyApp", "MyAppType", "Code", "Ver", "Context", "Log", "Temp", "Work", "Man", "ManVer");
var context = MockStatelessServiceContextFactory.Create(context, serviceTypeName, newUri, partitionId, replicaId);
var serviceInstance = new SearchServiceClass(context);

詳細については、このサンプルテストとこれを参照してください。