utilice una sirve que programacion para palabra objeto new metodos instancia crear and c# unit-testing dependency-injection mocking moq

c# - sirve - ¿Cómo usas Moq para simular una interfaz simple?



utilice la palabra new para crear una instancia de objeto c# (1)

Bueno, tengo una clase de lógica de negocios como esta:

Nota: para el contexto, los Informes del proveedor son entidades simples que describen una "descarga" para un documento PDF.

/// <summary> /// Houses business level functions for dealing with vendor briefs. /// </summary> public class VendorBriefController : IVendorBriefController { /// <summary> /// Vendor brief controller requires an instance of IVendorBriefRepository. /// </summary> IVendorBriefRepository _vendorBriefRepository; /// <summary> /// Initializes an instance of VendorBriefController. /// </summary> public VendorBriefController(IVendorBriefRepository vendorBriefRepository) { _vendorBriefRepository = vendorBriefRepository; } /// <summary> /// Get a list of string filters for vendor briefs. /// </summary> /// <returns>A list of string filters.</returns> public dynamic GetFilters() { List<string> filters = new List<string> { "All", "Active", "Inactive" }; return filters; } /// <summary> /// Retrieve vendor brief entity from the repository by its unique ID. /// </summary> /// <param name="Id">The unique ID of the vendor brief.</param> /// <returns>A vendor brief entity.</returns> public VendorBrief GetVendorBriefForEditing(int Id) { var vendorBrief = _vendorBriefRepository.GetVendorBrief(Id); return vendorBrief; } /// <summary> /// Get a dynamic list of vendor briefs from the repository based on the supplied filter. /// </summary> /// <param name="filter">The filter to be used when retrieving vendor briefs.</param> /// <returns>A dynamic sorted & filtered list of vendor briefs to be displayed in a grid view.</returns> public dynamic GetVendorBriefList(string filter) { IEnumerable<VendorBrief> results = _vendorBriefRepository.GetVendorBriefs(); switch (filter) { default: results = _vendorBriefRepository.GetVendorBriefs(); break; case "Active": results = _vendorBriefRepository.GetVendorBriefs(true); break; case "Inactive": results = _vendorBriefRepository.GetVendorBriefs(false); break; } return from x in results orderby x.DisplayOrder select new { ID = x.VendorBriefID, Title = x.Title, Active = x.IsActive, DisplayOrder = x.DisplayOrder }; } /// <summary> /// Save changes to the underlying repository in order to persist changes made to self-tracking vendor brief entities. /// </summary> /// <param name="vendorBrief"></param> public void EditVendorBrief(VendorBrief vendorBrief) { _vendorBriefRepository.SaveChanges(); } /// <summary> /// Remove a vendor brief from the underlying repository. /// </summary> /// <param name="vendorBrief">The vendor brief to be removed.</param> public void DeleteVendorBrief(VendorBrief vendorBrief) { _vendorBriefRepository.DeleteVendorBrief(vendorBrief); _vendorBriefRepository.SaveChanges(); } /// <summary> /// Add a vendor brief to the underlying repository. /// </summary> /// <param name="vendorBrief">The vendor brief to be added.</param> public void AddVendorBrief(VendorBrief vendorBrief) { _vendorBriefRepository.AddVendorBrief(vendorBrief); _vendorBriefRepository.SaveChanges(); } }

Estoy dando mis primeros pasos en la prueba de unidad y estoy aprendiendo sobre Moq. No quiero una clase de prueba de unidad completa escrita para esto (a menos que tenga ganas, por supuesto: P) pero una muestra simple servirá. Supongo que necesito " IVendorBriefRepository " IVendorBriefRepository para poder pasarlo al constructor cuando construyo mi controlador (no confundirlo con los controladores de mvc), pero no estoy seguro de cómo hacerlo. Una muestra que use algo de mi propio código realmente me ayudará a comenzar.

¡Gracias por adelantado!


Algo como esto probaría DeleteVendorBrief, por ejemplo.

Mock<IVendorBriefRepository> mock = new Mock<IVendorBriefRepository>(); VendorBriefController controller = new VendorBriefController(mock.Object); VendorBrief brief = new VendorBrief(); controller.DeleteVendorBrief(brief); mock.Verify(f=>f.DeleteVendorBrief(brief)); mock.Verify(f=>f.SaveChanges());