Mocks kullanarak Service Fabric Uygulamalarını birim testi hakkında özel sorular
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
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.