Come progetto di apprendimento, sto cercando di creare qualcosa di simile al WebGrid
fornito con ASP.NET MVC. Ora questo componente MyGrid<T>
assomiglia a questo:
public class MyGrid<T> where T : class
{
public MyGrid(IEnumerable<T> dataSource) { ... }
public bool AutoGenerateColumns { get; set; }
public MvcHtmlString HtmlMarkup { get; }
// some more stuff
}
Ho scritto finora alcuni test che testano le funzionalità di base della griglia, oltre a controllare alcune eccezioni generate. Ma mi chiedo come fare meglio a testare l'output corretto, dato che viene come MvcHtmlString
. Un esempio di come ho controllato una griglia vuota è il seguente test:
[TestMethod]
public void AutoGenerateColumnsFalseProducesEmptyTableWhenNoColumnsAreSpecified()
{
var grid = new MyGrid<object>(new object[] { "a", "b" });
grid.AutoGenerateColumns = false;
string markup = grid.HtmlMarkup.ToHtmlString();
XDocument xdoc = XDocument.Parse(markup);
XElement table = xdoc.Descendants().First();
Assert.IsTrue(table.Name == "table");
// children: thead, tbody, tfoot
foreach (XElement child in table.Descendants())
{
Assert.IsFalse(child.HasElements);
}
}
Questo mi sembra abbastanza noioso, inoltre non so se usare XDocument
è un buon modo per testarlo qui. Per creare il markup, utilizzo TagBuilder
invece.
Quindi controllare una griglia vuota non è così breve / elegante come mi piacerebbe che fosse. Qualche suggerimento su come rendere questo test migliore sono i benvenuti. Ma come potrei testare cose più complesse, come controllare l'output corretto?
Il TagBuilder
sembra produrre degli spazi bianchi, quindi un modo per testare sarebbe quello di rimuovere l'output di tutti gli spazi bianchi e quindi confrontarli con una stringa HTML scritta a mano. Ma ancora, questo sembra molto goffo (e lascia molto spazio per errori di battitura da parte mia).
Hai qualche suggerimento su come testare l'output HTML (più complesso) per la correttezza? Esiste un modo più elegante / migliore di XDocument
per analizzare l'output, forse?