Mocks kullanarak Service Fabric Uygulamalarını birim testi hakkında özel sorular

Dec 17 2020

Bu soru şunların devamı niteliğindedir : Service Fabric Uygulama Sınıfı için Birim Testleri Yazma

Uygulama tanımım şu türdendir - karşılaştığım en temel sorunları çözmek için basitleştirilmiştir:

namespace SearchService
{
    internal sealed class SearchServiceClass : StatelessService
    {
        //variables defined followed by constructor
        private string jsonStr;
        public SearchServiceClass(StatelessServiceContext context)
            : base(context)
        {
            try
            {
                var dataPackage = Context.CodePackageActivationContext
                .GetDataPackageObject("Data");
                jsonStr = File.ReadAllText(dataPackage.Path + @"\data.json");
            }
            catch
            {
                //exception handling code
                throw;
            }
        }
        
        public bool IsDataJsonLoaded
        {
            get
            {
                return !(jsonStr == null);
            }
        }
    }
}

Ve test sınıfı şöyle görünür:

namespace SearchService.Tests
{
    [TestClass]
    public class SearchServiceClassTest
    {
        [TestMethod]
        public void SearchServiceClassConstructor()
        {
           var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
           Assert.IsTrue(searchServiceClass.IsDataJsonLoaded);
        }
    }
}

Aldığım istisna, "System.NullReferenceException: Nesne başvurusu bir nesnenin örneğine ayarlanmadı. ", "DataPackage.Path" in "var dataPackage = Bağlamında" geçerli bir değere ayarlanmamasından kaynaklanıyor " .CodePackageActivationContext.GetDataPackageObject ("Veri"); " hat.

Sahte kullanarak CodePackageActivationContext'i nasıl çoğaltabilirim? Buradaki "Veri", "Veri" adında bir klasör olan ve SearchServiceClass koduyla birlikte bulunan DataPackage'ı ifade eder.

Yanıtlar

1 singhh-msft Dec 17 2020 at 17:31

Satırla dalga geçmek için aşağıdaki kod parçasını kullanabilirsiniz:

var codePackageActivationContext = new Mock<ICodePackageActivationContext>();

Daha fazla bilgi için şuna bakın : Azure hizmet kumaşlarını birim test etmek için Moq çerçevesi nasıl kullanılır?

Aşağıdaki sorgu için:

Tamamen anlamadığım başka bir şey, sınıfta yaratılan değişkenler ve üyelerdir, ancak kurucu çağrılmadan önce. Örneğin "özel dize jsonStr;" satır, Birim Testinde sadece kurucuyu ve "özel dize jsonStr" i çağırmama rağmen, Birim Testinde karışıklık olmadan yürütülüyor gibi görünüyor. yapıcının dışında. Yapıcı dışında oluşturulan tüm değişkenler için aynı şey geçerli mi?

Burada basit bir C # koduyla ilgilidir: private string jsonStr;Satırda jsonStr tanımlanmıştır. Ancak, başvurmadan önce onu başlatmalısınız, aksi takdirde kurucunuzda yaptığınız boş referans hatası verir.