Projelerimden birinde bir iş mantığı bileşeni test etmek istiyorum.Ünite testinde Entity Framework bağlamı nasıl taklit edilir veya değiştirilir?
BL:
public class CommunicationService
{
IContext context;
public CommunicationService()
{
var kernel = new StandardKernel(new NinjectConfig());
context = kernel.Get<IContext>();
}
// This creates a file
public void SomeMethodThatUsesIContext() { ... }
}
NinjectConfig:
class NinjectConfig : NinjectModule
{
public override void Load()
{
Bind<IContext>().To<CommunicationDbContext>();
}
}
Birim testi:
class FakeNinjectConfig : NinjectModule
{
public override void Load()
{
Bind<IContext>().To<FakeDbContext>();
}
}
:
[TestMethod]
public void ScheduleTransportOrder_1()
{
communicationService = new CommunicationService();
communicationService.SomeMethodThatUsesIContext();
Assert.IsTrue(...) // file should be created.
}
Ben birim testin projede başka Ninject yapılandırma var
Ve bu IContext uygulamasının birim testinde kullanılmasını istiyorum. Ancak hala orijinal olan CommunicationDbContext uygulamasını kullanıyor. Burada, başka bir nükleer konfigürasyonum olduğunda, çekirdeğe yükleneceğime inandım, ama şimdi bir şeyi yanlış anladığımı düşünüyorum. Bana yardım edebilir misin?
konu gerçekten yapıyorsun gerçeğinden kaynaklanmaktadır 'yeni StandardKernel (yeni NinjectConfig())
IContext
enjekte 'CommunicationService' kurucunuzda. Bunun mantığının ne olduğu konusunda emin değilim, ancak geçerli kodla hiçbir zaman alay konusu 'IContext'i' CommunicationService''e sağlayamayacaksınız. Yapımcı Ajan kullanarak Enjeksiyon'a bakıyorum ve "IContext" in otomatik olarak "CommunicationService" e enjekte edilmesini sağlayarak testinizde alaylı bir örnek sağlayabilirsiniz. –