Je lis Asp.net MVC Framework et je lis sur IDataErrorInfo comme forme de validation.Comment tester unit IDataErrorInfo?
Alors je vais juste poster ce qu'il a.
Classe de produits
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace MvcApplication1.Models
{
public partial class Product : IDataErrorInfo
{
private Dictionary<string, string> _errors = new Dictionary<string, string>();
partial void OnNameChanging(string value)
{
if (value.Trim() == String.Empty)
_errors.Add("Name", "Name is required.");
}
partial void OnPriceChanging(decimal value)
{
if (value <= 0m)
_errors.Add("Price", "Price must be greater than 0.");
}
#region IDataErrorInfo Members
public string Error
{
get { return string.Empty; }
}
public string this[string columnName]
{
get
{
if (_errors.ContainsKey(columnName))
return _errors[columnName];
return string.Empty;
}
}
#endregion
}
}
ProductRepository.
using System.Collections.Generic;
using System.Linq;
namespace MvcApplication1.Models
{
public class ProductRepository : IProductRepository
{
private ProductsDBEntities _entities = new ProductsDBEntities();
public IEnumerable<Product> ListProducts()
{
return _entities.ProductSet.ToList();
}
public void CreateProduct(Product productToCreate)
{
_entities.AddToProductSet(productToCreate);
_entities.SaveChanges();
}
}
public interface IProductRepository
{
IEnumerable<Product> ListProducts();
void CreateProduct(Product productToCreate);
}
}
Contrôleur
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
private IProductRepository _repository;
public ProductController()
:this(new ProductRepository()){}
public ProductController(IProductRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
return View(_repository.ListProducts());
}
//
// GET: /Product/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Product/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")]Product productToCreate)
{
if (!ModelState.IsValid)
return View();
_repository.CreateProduct(productToCreate);
return RedirectToAction("Index");
}
}
}
Pourtant, Nulle part dans le livre ce que je vois comment effectivement ce test unitaire. Comme il vous montre comment tester unitairement sa couche de service, mais rien sur le test unitaire IDataErrorInfo.
Alors, comment pourrais-je tester cela? J'aime vérifier les messages d'erreur pour voir s'ils sont identiques. Comme si je passe dans un champ nul, j'aime vérifier si le message d'erreur serait le bon pour ce champ nul. Après je voudrais vérifier si la logique d'instruction après la substance qui doit être validée pour voir si elle fait ce qui est attendu, mais je ne sais même pas comment appeler cette classe partielle, d'autant plus que vous ne le faites pas normalement vouloir frapper la base de données lors de tests unitaires.
La classe de produit que vous avez affichée est partielle. Il doit y avoir une ou plusieurs implémentations supplémentaires de la classe Product qui invoquent (entre autres choses) les methdods partiels. Ce n'est pas très facile de répondre à votre question quand on ne sait pas à quoi ça ressemble. De plus, je ne vois pas comment le référentiel et le contrôleur ont quelque chose à voir avec cela, alors peut-être pourriez-vous réduire votre question? –