2011-11-01 34 views
10

Tôi đang cố gắng kiểm tra các giá trị Data được trả về từ một số ASP.NET MVC3 JsonView, nhưng tôi không chắc chắn cách thực hiện.Làm cách nào để kiểm tra kết quả Json của tôi trong trang web ASP.NET MVC3?


Tôi có trang web ASP.NET MVC3 đơn giản, với phương thức hành động trả về JsonView.

ví dụ (một số mã pseduo cho một danh sách các loại vô danh):

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

Bây giờ trong thử nghiệm đơn vị của tôi, tôi đang cố gắng để kiểm tra các giá trị của Data. gợi ý khác nhau Vì vậy, sau đó, tôi đang làm những công việc mà -does- sau ..: -

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

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

Nhưng tôi cũng muốn kiểm tra ba kết quả đầu tiên mà trở lại, chống lại một danh sách cố định của dữ liệu.

Chú ý làm thế nào tôi có đoạn mã sau: var lotsOfFail = database.GetMeThatDamnDataList(); Vâng, cơ sở dữ liệu là dân cư với một số dữ liệu mã hóa cứng VÀ một số dữ liệu ngẫu nhiên. Ba bản ghi đầu tiên được mã hóa cứng.

Vì vậy, tôi muốn đảm bảo rằng tôi có thể kiểm tra dữ liệu được mã cứng của mình.

Như thế này ...

// 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); 
} 

nhưng vì data là một động lực, tôi không biết làm thế nào để kiểm tra các thuộc tính của nó.

Bất kỳ ý tưởng nào?

Trả lời

9

Sau đây nên làm việc:

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

Chú ý rằng tôi đã đảo ngược thứ tự của các đối số là người đầu tiên là mong đợi và thứ hai là thực tế.

+0

là điều này bởi vì nhu cầu năng động là thứ hai hay gì đó? tại sao * sắp xếp * của các hiệu ứng phương trình? –

+0

Ah bleh :) Tôi cũng thấy lỗi của mình. Tôi không nên làm một '== 'nhưng hai đối số. Chúc mừng :) –

+2

@ Pure.Krome, yêu cầu không ảnh hưởng gì cả. Nó chỉ là quy ước. Vì vậy, khi kiểm tra đơn vị của bạn không thành công, bạn sẽ nhận được một thông báo có ý nghĩa: 'expected: 1, actual: 2'. Nếu bạn đặt các đối số theo thứ tự sai khi thử nghiệm của bạn thất bại, bạn sẽ tự hỏi tại sao trên Trái đất bạn mong đợi 1, khi hardCodedData của tôi chứa 2. –

Các vấn đề liên quan