Menulis UnitTests untuk Kelas Aplikasi Service Fabric

Dec 16 2020

Saya menulis pengujian unit untuk kelas Aplikasi Fabric Layanan. Saya mengalami beberapa kesalahan yang tidak saya mengerti bagaimana cara memperbaikinya. Definisi kelas adalah dari jenis:

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);
            }
        }
    }
}

Aplikasi memiliki kelas pengujian yang didefinisikan sebagai berikut:

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

Saya mendapatkan kesalahan berikut:

Tidak ada argumen yang diberikan yang sesuai dengan 'konteks' parameter formal yang diperlukan dari 'SearchServiceClass.SearchServiceClass (StatelessServiceContext)'.

Bisakah seseorang memberi tahu saya cara memperbaikinya?

Sunting: Saya telah melihat ServiceFabric.Mocks. Apa yang saya pahami adalah bahwa saya perlu menggunakan the MockStatelessServiceContextFactory.Defaultuntuk membuat konteks tiruan. Bagaimana cara melakukannya, apakah mengikuti cara yang benar ?:

var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);

Jawaban

1 LoekD Dec 16 2020 at 18:46

Ya, Anda dapat menggunakan pustaka ServiceFabric.Mocks , untuk membuat contoh uji layanan Anda dengan menggunakan kode berikut:

var serviceInstance = new SearchServiceClass(MockStatelessServiceContextFactory.Default);

Sebagai alternatif dari Defaultkonteksnya, Anda juga dapat membuat instance yang disesuaikan:

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);

Lihat tes sampel ini dan tes ini untuk informasi lebih lanjut.