Bir denetleyicinin Index
eylemini denemeye çalışıyorum. Eylem, Customer
etki alanını bir görünüm modeline TestCustomerForm
eşlemek için AutoMapper kullanır. Bu çalışırken, Index
eyleminden aldığım sonuçları sınamanın en iyi yolu konusunda endişeliyim.Bir ViewModel'i eşlemek için Automapper'ı kullandıktan sonra nasıl ve ne test etmeliyim?
public ActionResult Index()
{
TestCustomerForm cust = Mapper.Map<Customer,
TestCustomerForm>(_repository.GetCustomerByLogin(CurrentUserLoginName));
return View(cust);
}
Ve TestMethod
şuna benzer::
kontrolörün endeksi eylemi şöyle bir müşteri depo alay ve bunu kurmak için Rhino.Mocks
kullanmak CreateTestController
yöntemde
[TestMethod]
public void IndexShouldReturnCustomerWithMachines()
{
// arrange
var customer = SetupCustomerForRepository(); // gets a boiler plate customer
var testController = CreateTestController();
// act
ViewResult result = testController.Index() as ViewResult;
// assert
Assert.AreEqual(customer.MachineList.Count(),
(result.ViewData.Model as TestCustomerForm).MachineList.Count());
}
müşteriyi SetupCustomerForRepository
'dan iade edin. Bu şekilde, havuzun, hedeflenen müşteriyi Index
eylemi _repository.GetCustomerByLogin(CurrentUserLoginName)
çağırdığında iade edeceğini biliyorum. Bu nedenle, eşit bir sayımın IndexShouldReturnCustomerWithMachines
'u tatmin etmek için yeterli olduğunu iddia ediyorum.
Bunların hepsi, test etmem gereken şey konusunda endişeliyim dedi.
result.ViewData.Model as TestCustomerForm
'u dökmek tahminsiz görünüyor. Bu gerçekten bir sorun mu? Bu durum beni endişelendiriyor çünkü bu durumda gerçekten test odaklı gelişim yapıyorum ve testi tatmin etmek için belirli bir uygulamaya güveniyorum gibi görünüyor.- Doğru haritalamayı sağlamak için daha uygun testler var mı?
- Her eşlenen özelliği
TestCustomerForm
'dan mı test etmeliyim? - Yapmam gereken daha genel denetleyici eylem testleri var mı? Eğer denetleyici içine bu geçiş
public interface IMapper<TSource, TDest> { TDest Map(TSource source); } public CustomerToTestCustomerFormMapper: IMapper<Customer, TestCustomerForm> { static CustomerToTestCustomerFormMapper() { // TODO: Configure the mapping rules here } public TestCustomerForm Map(Customer source) { return Mapper.Map<Customer, TestCustomerForm>(source); } }
Sonraki:
Çok anlamlı olan büyük cevap. Kuşak için test ifadenizi ekleyebilir misiniz? – ahsteele
Bu, Get Me yönteminin bir IEnumerable döndürdüğü ve bir eylem sonucu olmayan yeni WebApi ile nasıl çalışır? –
shashi
@sassyboy Ben kendinize benzer bir soyutlama yaratabileceğiniz, web api ile izole bir hizmet katmanı kullanma eğilimindeyim. –