मैं एंटीटी फ्रेमवर्क कोड प्रथम कक्षाओं के लिए कुछ परीक्षण करने के लिए Moq
का उपयोग करने का प्रयास कर रहा हूं। मैं मोक और मॉकिंग तकनीकों के लिए बहुत नया हूं और मुझे आश्चर्य है कि अगर मैं नीचे वर्णित एक परीक्षण आसानी से करना संभव है। मैंने कुछ समाधानों के लिए वेब के माध्यम से खोज की, लेकिन अधिकांश रिपोजिटरी पैटर्न पर आधारित हैं, जिन्हें मैं टालना चाहता हूं।एंटिटी फ्रेमवर्क आईडीबीसेट गणना() इत्यादि के साथ Moq का उपयोग कैसे करें
मैं संदर्भ
public interface ITestEntities
{
IDbSet<Order> Orders { get; }
IDbSet<Product> Products { get; }
IDbSet<User> Users { get; }
}
फिर
संदर्भ
public class TestEntities : DbContext, ITestEntities
{
public TestEntities() : base("name=TestEntities")
{
}
public virtual IDbSet<Order> Orders { get; set; }
public virtual IDbSet<Product> Products { get; set; }
public virtual IDbSet<User> Users { get; set; }
}
के लिए ITestEntities
इंटरफेस हो एक नियंत्रक और एक कार्य Moq
public class HomeController : Controller
{
private ITestEntities db;
public HomeController()
{
db = new TestEntities();
}
public HomeController(ITestEntities db)
{
this.db = db;
}
public ActionResult Index()
{
var count = db.Users.Count();
ViewBag.count = count;
return View(count);
}
}
और अंत में एक NUnit परीक्षण परीक्षण करने के लिए
[Test]
public void ModelValueShouldBeTwo()
{
var mockUsers = new Mock<IDbSet<User>>();
mockUsers.Setup(m => m.Count()).Returns(2);
var mockDB = new Mock<ITestEntities>();
mockDB.Setup(db => db.Users).Returns((IDbSet<User>)mockUsers);
var controller = new HomeController((ITestEntities)mockDB);
var view = controller.Index();
Assert.IsInstanceOf<ViewResult>(view);
Assert.AreEqual(((ViewResult)view).Model, 2);
}
समस्या इस पंक्ति के साथ है: mockUsers.Setup(m => m.Count()).Returns(2);
। जब इस परीक्षण चल रहा है मैं त्रुटि निम्न मिल:
System.NotSupportedException : Expression references a method that does not belong to the mocked object: m => m.Count<User>()
मुझे लगता है कि यह एक स्थिर विधि जा रहा है .Count()
की वजह से है, तो यह Moq द्वारा मज़ाक उड़ाया नहीं किया जा सकता। क्या एमओक का उपयोग करके इस सरल कार्रवाई का परीक्षण करने का कोई तरीका है और पूर्ण रूप से भंडारित पैटर्न का उपयोग नहीं कर रहा है, जैसा कि मुझे समझ में आता है कि किसी भी तरीके से यह .Count()
भाग को टेस्ट करने योग्य होने के लिए हार्डकोड किया गया हो सकता है ... शायद मैं सिर्फ गलत तरीके से मैक्स का उपयोग करता हूं ? क्योंकि मुझे लगता है कि यह ईएफ कोड पहले के साथ काफी सरल और संभव होना चाहिए।
नोट: यह Async प्रश्नों के लिए काम नहीं करता है। इसके लिए समाधान के लिए आधिकारिक ईएफ दस्तावेज़ देखें: http://msdn.microsoft.com/en-us/data/dn314429.aspx#async –