2011-11-01 17 views
10

Estoy tratando de probar los valores Data que se devuelven desde ASP.NET MVC3 JsonView, pero no estoy seguro de cómo.¿Cómo puedo probar mi unidad Json en un sitio web ASP.NET MVC3?


Tengo un simple sitio web ASP.NET MVC3, con un método de acción que devuelve un JsonView.

por ejemplo (un código pseduo para obtener una lista de los tipos anónimos):

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

Ahora, en mi prueba de unidad, estoy tratando de poner a prueba los valores de Data. Así siguientes varias sugerencias, estoy haciendo lo siguiente .. que trabajan -does-: -

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

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

Pero también me gustaría probar los tres primeros resultados que vienen atrás, en contra de una lista fija de datos.

Observe cómo tengo el siguiente código: var lotsOfFail = database.GetMeThatDamnDataList(); Bueno, la base de datosse rellena con algunos datos codificados y algunos datos aleatorios. Los primeros tres registros están codificados.

Como tal, deseo asegurarme de poder probar mis datos codificados.

Así ...

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

sino porque data es un proceso dinámico, no sé cómo probar las propiedades de la misma.

¿Alguna idea?

Respuesta

9

lo siguiente debe funcionar:

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

Tenga en cuenta que he invertido el orden de los argumentos que la primera es la espera y la segunda es la real.

+0

¿Esto se debe a que la dinámica necesita ser la segunda o algo así? ¿por qué * orden * de la ecuación afectaría las cosas? –

+0

Ah bleh :) Veo mi error ahora, también. No debería haber hecho un '==' sino dos argumentos. Saludos :) –

+2

@ Pure.Krome, el pedido no afecta a nada. Es solo la convención. De modo que cuando la prueba de su unidad falla, obtiene un mensaje significativo: 'esperado: 1, real: 2'. Si coloca los argumentos en el orden incorrecto cuando falla la prueba, se preguntará por qué en la Tierra espera 1, cuando mi hardCodedData contiene 2. –

Cuestiones relacionadas