Come dovrei testare l'output HTML creato dalla mia classe?

6

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?

    
posta InvisiblePanda 10.08.2015 - 18:37
fonte

1 risposta

2

L'approccio più moderno consiste nell'utilizzare l'HTML Agility Pack. La sintassi è più vicina alle selezioni dom presenti in una libreria JS come JQuery.

Ecco alcuni esempi: link link

Può anche essere caricato come pacchetto Nuget.

    
risposta data 14.08.2015 - 14:55
fonte

Leggi altre domande sui tag