学習プロジェクトとして、ASP.NET MVCに付属するWebGrid
に似たものを作成しようとしています。今、このコンポーネントMyGrid<T>
は次のようになります。
public class MyGrid<T> where T : class
{
public MyGrid(IEnumerable<T> dataSource) { ... }
public bool AutoGenerateColumns { get; set; }
public MvcHtmlString HtmlMarkup { get; }
// some more stuff
}
これまでに、グリッドの基本的な機能をテストするテストをいくつか作成し、いくつかの例外がスローされていないかどうかを確認しました。しかし、それがMvcHtmlString
であるので、正しい出力をどのようにテストするのが最善かと思います。空のグリッドを確認する方法の例は、次のテストです。
[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);
}
}
これは私にはかなり不格好なようですが、ここでXDocument
を使用してこれをテストする良い方法であるかどうかはわかりません。マークアップを作成するには、代わりにTagBuilder
を使用します。
したがって、空のグリッドをチェックすることは、私が望んでいるほど短く/エレガントではありません。このテストを改善するためのヒントは大歓迎です。しかし、正しい出力を確認するなど、より複雑なものをテストするにはどうすればよいですか?
TagBuilder
は空白を生成するように見えるので、テストする1つの方法は、すべての空白の出力を取り除いてから、手書きのHTML文字列と比較することです。しかし、これも非常に不格好なように見えます(そして、私の側に入力ミスの余地がたくさん残っています)。
(より複雑な)HTML出力が正しいかどうかをテストする方法について何か提案はありますか?出力を解析するためのXDocument
よりもエレガントで優れた方法はありますか?
より近代的なアプローチは、HTML Agility Packを利用することです。構文は、JQueryのようなJSライブラリにあるdomの選択に近いです。
次に例をいくつか示します。
これはNugetパッケージとしてロードすることもできます。