मैं निम्नलिखित वर्गों (जहां PilsnerContext एक DbContext वर्ग है):नकली DbContext.set <T> .Add() EF6
public abstract class ServiceBase<T> : IService<T> where T: class, IEntity
{
protected readonly PilsnerContext Context;
protected ServiceBase(PilsnerContext context)
{
Context = context;
}
public virtual T Add(T entity)
{
var newEntity = Context.Set<T>().Add(entity);
Context.SaveChanges();
return newEntity;
}
}
public class ProspectsService : ServiceBase<Prospect>
{
public ProspectsService(PilsnerContext context) : base(context){}
}
और मुझे मजाक विधि जोड़ें की एक इकाई परीक्षण बनाने के लिए कोशिश कर रहा हूँ संदर्भ की तरह:
[TestClass]
public class ProspectTest
{
[TestMethod]
public void AddProspect()
{
var mockProspect = new Mock<DbSet<Prospect>>();
var mockContext = new Mock<PilsnerContext>();
mockContext.Setup(m => m.Prospects).Returns(mockProspect.Object);
var prospectService = new ProspectsService(mockContext.Object);
var newProspect = new Prospect()
{
CreatedOn = DateTimeOffset.Now,
Browser = "IE",
Number = "1234567890",
Visits = 0,
LastVisitedOn = DateTimeOffset.Now
};
prospectService.Add(newProspect);
mockProspect.Verify(m=>m.Add(It.IsAny<Prospect>()), Times.Once);
mockContext.Verify(m=>m.SaveChanges(), Times.Once);
}
}
लेकिन ज़ोर:
mockProspect.Verify(m=>m.Add(It.IsAny<Prospect>()), Times.Once);
विफल हो रहा है, मुझे लगता है है, क्योंकि मैं Context.s उपयोग कर रहा हूँ et()। Context.Prospects.Add() के बजाय जोड़ें() जोड़ें विधि में जोड़ें लेकिन इस परीक्षण को पास करने का सही तरीका कैसा है?
अपवाद है:
Expected invocation on the mock once, but was 0 times: m => m.Add(It.IsAny<Prospect>()) No setups configured. No invocations performed.
अग्रिम धन्यवाद।
+1 एक अच्छी तरह से लिखे गए पहले प्रश्न के लिए +1, आपका स्वागत है SO! –
धन्यवाद पैट्रिक! – ferflores
संभावित डुप्लिकेट [एंटीटी फ्रेमवर्क 6 असिनक विधियों का नकल कैसे करें?] (Http://stackoverflow.com/questions/21062745/how-to-mock-entity-framework-6-async-methods) –