Webアプリケーションのユーザーロールのテストをいくつか作成する必要があります。説明を最小限に抑えるために、テストの1つには、ユーザーに対してメニューエントリが表示されているかどうかを確認することが含まれます。
このテストでは、次のようなUserRolesというテーブルを使用します。
sUserName bDoesntHaveMenuX
User1 1
User2 0
User3 1
bDoesntHaveMenuXはビットタイプです。
ValidationRuleから派生したクラスがあり、XPath式に基づいて特定のテキストがページに存在するかどうかをチェックし、テキストを探すノードを見つけます。このクラスのパブリックプロパティは次のとおりです。
string XPathExpression
string Text
bool FailIfFound
最後の1つは、テキストが見つかった場合と見つからなかった場合にルールが失敗するかどうかを示します。
テストでは、DSと呼ばれる最初に述べたテーブルのデータソースを追加しました。興味のあるリクエストに対して、検証ルールクラスの新しいインスタンスを次の値で追加しました。
Text=MenuX
XPathExpression=//div[@id='menu']//td
FailIfFound={{DS.UserRoles.bDoesntHaveMenuX}}
残念ながら、これは機能しません。その理由は、データバインディングプロセスがコンテキスト変数DS.UserRoles.bDoesntHaveMenuXの値が「False」または「True」であるためと思われます。値は文字列であるため、バインドするとキャストエラーが発生します。
私が考える限り、私の選択肢は次のとおりです。
- FailIfFoundの文字列を受け入れるように検証ルールを変更します。2つの理由から、有効なオプションではありません。それはハックであり、他の場所でも同じルールが使用されています。
- 上記の検証ルールを使用する新しい検証ルールを作成し、FailIfFoundを文字列として実装します。上記と同じ理由で、私もこれが好きではありません。それはハックです。
- データを検証ルールに渡す前に、テストをコーディングして適切なキャストを実行します。他に方法がない場合にのみテストをコード化することを好むので、これは好きではありません。
それは私に質問をもたらします。別の方法はありますか?
ありがとうございました。