Я читаю Asp.net MVC Framework, и я читаю об IDataErrorInfo как форме проверки.Как модульный тест IDataErrorInfo?
Так что я просто собираюсь опубликовать то, что у него есть.
Продукт класса
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);
}
}
Контроллер
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");
}
}
}
Но нет, где в книге я вижу, как на самом деле это модульное тестирование. Подобно тому, как он показывает вам, как выполнить модульное тестирование своего уровня сервисного уровня, но ничего о модульном тестировании IDataErrorInfo.
Итак, как я могу это проверить? Мне нравится проверять сообщения об ошибках, чтобы убедиться, что они одинаковые. Например, если я передаю пустое поле, мне нравится проверять, будет ли сообщение об ошибке правильным для этого нулевого поля.
После того, как мне нравится проверять логику оператора после того, как материал должен быть проверен, чтобы убедиться, что он делает то, что ожидается, но я даже не знаю, как назвать этот частичный класс особенно тем, что вы обычно не используете хотите попасть в базу данных при выполнении модульных тестов.
Класс продукта, который вы опубликовали, является частичным. Должна быть одна или несколько дополнительных реализаций класса Product, которые (среди прочего) вызывают частичные методы. Ответ на ваш вопрос не так-то просто, когда мы не знаем, как это выглядит. Кроме того, я не вижу, как с этим связаны Репозиторий и Контроллер, так что, возможно, вы можете решить свой вопрос? –