Ho una funzione che restituisce un tipo anonimo che voglio testare nel mio controller MVC.Lancio del tipo anonimo a dinamico
public JsonResult Foo()
{
var data = new
{
details = "something",
more = "More"
};
return Json(data);
}
voglio verificare i dati che ricevo dalla funzione Foo, cosa che sto facendo ora sta ottenendo il tipo di dati e ottenere suoi valori proprietà con la riflessione.
[Test]
public void TestOne()
{
var data = _controller.Foo().Data;
var details = data.GetType().GetProperty("details").GetValue(data, null);
var more = data.GetType().GetProperty("more").GetValue(data, null);
Assert.AreEquals("something", details);
Assert.AreEquals("More", more);
}
C'è un modo semplice simile per controllare le proprietà anonime?
[Test]
public void TestTwo()
{
var data = (dynamic) _controller.Foo().Data;
var details = data.details; // RunTimeBinderException object does not contain definition for details
var more = data.more;
Assert.AreEquals("something", details);
Assert.AreEquals("More", more);
}
Dal momento che questo è per unit testing, è possibile utilizzare 'InternalsVisibleTo'. Vedi [Tipi anonimi sono interni, C# 4.0 Attenzione dinamica!] (Http://www.heartysoft.com/anonymous-types-c-sharp-4-dynamic) Grazie a @MarcGravell per aver sottolineato che gli oggetti anonimi sono "interni" ! – TrueWill
+1 per InternalsVisibleTo suggerimento. Funziona come un fascino. –