1 つのページ内での個別の操作が異なる結果になることを確認するテストがあります。具体的には、ページを並べ替える方法がいくつかあり、各並べ替えが異なることを確認するテストが必要です。各種類の正確性を確認するために、他のテストがあります。
この会話の焦点は、何をテストするか、またはメソッドをテストすることではなく、テスト操作を並行して実行し、最後に結果を比較する良い方法にあることを望みます。テストにおける並列操作は、興味深いトピックであり、他の人にも役立つ可能性がある十分に広いトピックだと思います。
「generateHashFromSearchResults()」を、現在の IE インスタンスに表示される検索結果の順序を表す文字列を返す関数にします。以下は、1 つのブラウザー インスタンスを使用してシリアル化された方法で作業コードがどのように見えるかです。
var set = new HashSet<string>();
var sortOptions = new List<String>() { "sort1", "sort2", "sort3" };
// Default sort
set.Add(generateHashFromSearchResults());
sortOptions.ForEach(s => {
ie.Link(Find.ByText(s)).Click();
set.Add(generateHashFromSearchResults());
});
Assert.That(set.Count() == 4);
数か月前に PLINQ について読んだことがあり、これは適切なユース ケースであると考えていました。ここで、「generateHashFromSearchResults(IE ie)」を同じ関数にしますが、明示的に定義された IE インスタンスで動作します。私はこのようなことを試しました:
List<string> resultList = sortOptions.AsParallel().Select(s => {
var ie = new IE(true);
ie.Link(Find.ByText(s)).Click();
return generateHashFromSearchResults(ie);
}).ToList();
// Forget about default sort for now. There should be 3 distinct results
Assert.That(new HashSet<string>(resultList).Count() == 3);
私が現在直面している最大の問題は、PLINQ がスレッド管理を行う方法を理解していないことです。WatiN は、アパートメントの状態をシングル スレッド (STAThread) に設定して実行する必要があります。各 IE インスタンスは独自のスレッドにある必要がありますが、PLINQ クエリの各スレッドを適切なアパートメント状態に設定しても問題は解決しません。
続行するには PLINQ についてさらに学習する必要があるか、これを機能させるために手動でスレッド管理についてさらに学習する必要があるのではないかと疑い始めています。
何かご意見は?