Metoda działania w mojej aplikacji ASP.NET MVC2 zwraca obiekt JsonResult iw moim teście jednostki chciałbym sprawdzić, czy zwracany obiekt JSON rzeczywiście zawiera oczekiwane wartości."dynamiczne" słowo kluczowe i dane JSON
Próbowałem to:
1. dynamic json = ((JsonResult)myActionResult).Data;
2. Assert.AreEqual(JsonMessagesHelper.ErrorLevel.ERROR.ToString(), json.ErrorLevel);
Ale dostaję RuntimeBinderException " 'obiekt' nie zawierają definicji dla 'errorlevel'".
Jednak, kiedy umieścić punkt przerwania na linii 2 i sprawdzić zmienną dynamiczną json (patrz zdjęcie poniżej), to oczywiście ma zawierać ciąg errorlevel i ma wartość oczekiwaną, więc jeśli nie było spoiwo wykonawcze grając zabawnie test przejdzie.
Co ja nie dostanę? Co robię źle i jak mogę to naprawić? Jak mogę przekazać asercję?
it * to * działa. I doceniam, jak to działa, ale wciąż wygląda na całkiem hack. Bardzo sprzeczne z intuicją używanie RouteValueDictionary do sprawdzania zawartości anonimowego obiektu ... Mogę tylko mieć nadzieję na zapamiętanie tego rozwiązania, ponieważ nie sądzę, że sam bym to wymyślił. Czy nie istnieje inna klasa, która zrobiłaby tę samą sztuczkę z anonimowymi obiektami, coś nie ukrytego w System.Web.dll? (Dziwne, że to żyje w Przestrzeni nazw System.Web.Routing, ale NIE w System.Web.Routing.dll) –