चलें कहते हैं कि तुम है 2 परत समाधान
MyApp.Web
MyApp.Data
अपने डेटा परत में आप कुछ इस तरह होगा:
public class ProductsRepository : IProductsRepository
{
public List<Product> GetAll()
{
//EF stuff
return _dbcontext.Products;
}
}
जहां आईपीप्रोड्स रिपोजिटरी
है
public interface IProductsRepository
{
List<Product> GetAll();
}
MyApp.Web में यह रुझान करना है।
public class ProductsController : Controller
{
private readonly IProductsRepository _productsRepository;
public ProductsController(IProductsRepository productsRepository)
{
_productsRepository = productsRepository;
}
public ActionResult Index(int page=1)
{
var allProducts = _productsRepository.GetAll();
return View(allProducts)
}
}
कौन कार्यावधि में निर्माता में ProductsRepository में डालता है? लोग इसके लिए निर्भरता इंजेक्शन जैसे निदान फ्रेमवर्क का उपयोग करते हैं। पर क्यों? क्योंकि यह उन्हें नकली ProductsRepository करने के लिए और इस
public class FakeProductsRepository : IProductsRepository
{
public List<Product> GetAll()
{
return new List<Product>
{
new Product { Name = "PASTE" }
new Product { Name = "BRUSH" }
},
}
}
और फिर इकाई परीक्षण इस
[TestMethod]
public void IndexGetsAllProducts()
{
//Arrange
var fakeProductRepo = new FakeProductsRepository();
var productsController = new ProductsController(fakeProductRepo);
//Act
var result = productsController.Index(1) as ViewResult;
//Assert
var model = result.Model as List<Product>;
Assert.AreEqual(2, model.Count);
}
अनिवार्य रूप से की तरह नियंत्रक की तरह सक्षम बनाता है आप डेटाबेस तो इकाई परीक्षण है faking हैं डेटाबेस के तेज़ और स्वतंत्र। कभी-कभी लोगों को मॉकिंग फ्रेमवर्क जैसे Moq का उपयोग करने के लिए, जो अनिवार्य रूप से वही काम करता है।
यदि आप उत्पाद रिपोजिटरी का परीक्षण करना चाहते हैं तो इसे अब यूनिट परीक्षण नहीं कहा जाता है क्योंकि यह बाहरी स्रोत पर निर्भर करता है। उन लोगों का परीक्षण करने के लिए आप अनिवार्य रूप से Entityframework का परीक्षण कर रहे हैं।
यूनिट परीक्षणों के संयोजन में लोग स्पीकफ्लो जैसे ढांचे का उपयोग करके एकीकरण परीक्षण करते हैं। अनिवार्य रूप से आप उत्पाद नियंत्रक को वास्तविक उत्पाद रिपोजिटरी के साथ तुरंत चालू कर सकते हैं और परिणामों को वापस देख सकते हैं।
बस एक एफवाईआई: इन्हें आम तौर पर एकीकरण टेस्ट के रूप में जाना जाता है। अगर वे यूनिट टेस्ट थे .. आप हर 30 सेकेंड में "रन टेस्ट .." मार रहे होंगे (जैसे कि आप टीडीडी में होना चाहिए) और प्रत्येक टेस्ट के लिए डेटाबेस में राउंडट्रिप आपके परीक्षण मिनट/घंटे के लिए चलाएगी। एकीकरण टेस्ट जो वास्तव में अन्य प्रणालियों के साथ एकीकृत होते हैं, वे प्री-रिलीज चलाते हैं। –
@ सिमॉन व्हाइटहेड: तो हम रिपोजिटरी पैटर्न का उपयोग क्यों करते हैं, क्या इसकी आवश्यकता है और – neel
को फोकलने के बीच क्या अंतर है * उसके बाद मैं सीआरयूडी ऑपरेशंस का परीक्षण करना चाहता हूं * आप सीआरयूडी परिचालन से जुड़े अपने तर्क का परीक्षण करना चाहते हैं, या आप परीक्षण करना चाहते हैं इकाई फ्रेमवर्क? –