2011-11-01 19 views
10

ASP.NET MVC3 JsonView'dan döndürülen Data değerlerini test etmeye çalışıyorum, ancak nasıl yapacağımı bilmiyorum.Json sonucumu bir ASP.NET MVC3 web sitesinde nasıl test edebilirim?


Basit bir ASP.NET MVC3 web sitem var, bir JsonView döndüren bir eylem yöntemiyle.

mesela (anonim türlerinin listesi için biraz pseduo kodu): benim birim sınama Şimdi

var lotsOfFail = database.GetMeThatDamnDataList(); 
var returnData = (from x in lotsOfFail 
        select new 
        { 
         Id = x.Id, 
         Name = x.Name 
         .. 
        }).ToList(); 
return Json(returnData, JsonRequestBehavior.AllowGet); 

, ben Data değerlerini test etmek çalışıyorum.

// Act. 
JsonResult jsonResult = controller.PewPewKThxBai(null, null); 

// Assert.  
Assert.IsNotNull(jsonResult); 
dynamic data = jsonResult.Data; 
Assert.IsNotNull(data); 
Assert.IsTrue(data.Count >= 0); 

Ama ayrıca verilerin sabit bir listeye karşı, geri gel ilk üç sonuçlarını test etmek isteyen -: Yani aşağıdaki çeşitli öneriler, ben .. şu ki -does- iş yapıyorum. Aşağıdaki kod var nasıl

Uyarı: var lotsOfFail = database.GetMeThatDamnDataList(); Eh, veritabanı bazı kodlanmış veriler VE rastgele verilerle doldurulur. İlk üç kayıt kodlanmış.

Bu yüzden, sabit kodlanmış verilerimi test edebildiğimden emin olmak isterim. Bunun gibi

...
// Assert.  
Assert.IsNotNull(jsonResult); 
dynamic data = jsonResult.Data; 
Assert.IsNotNull(data); 

var hardCodedData = 
    FakeWhatevers.CreateHardcodedWhatevers() 
    .Where(x => x.EventType == EventType.BannableViolation) 
    .ToList(); 
Assert.IsTrue(data.Count >= hardCodedData .Count); 

for (int i = 0; i < hardCodedData .Count; i++) 
{ 
    Assert.AreEqual(data[0].Id== hardCodedData [0].GameServerId); 
} 

ama data dinamik olduğu için, bundan özelliklerini test etmek nasıl bilmiyorum.

Herhangi bir fikrin var mı?

cevap

9

çalışmalıdır: Ben ilk olarak argüman sırasını ters gelmiş

for (int i = 0; i < hardCodedData.Count; i++) 
{ 
    Assert.AreEqual(hardCodedData[i].GameServerId, data[i].Id); 
    Assert.AreEqual(hardCodedData[i].GameServerName, data[i].Name); 
    ... 
} 

Bildirim beklenen ve ikinci gerçekleşen.

+0

bunun sebebi, dinamiklerin ikinci veya başka bir şey olması gerektiğinden mi? neden denklem etkisinin * siparişi * istenir? –

+0

Ah bleh :) Haarımı şimdi de görüyorum. Bir '==' ama iki argüman yapmamalıydım. Şerefe :) –

+2

@ Pure.Krome, sipariş hiçbir şey etkilemez. Bu sadece bir kongre. Böylece birim testiniz başarısız olduğunda anlamlı bir mesaj alırsınız: 'beklenen: 1, gerçek: 2'. Testiniz başarısız olduğunda argümanları yanlış sıraya koyarsanız, hardCodedData'm 2 içerdiği zaman Dünya'da neden 1'i beklediğinizi merak edeceksiniz. –

İlgili konular