そのため、私のチームが SpecFlow を使用してテストしている MVC アプリを使用しています。ここ[RequiredIf(prop, val)]
で説明されている実装を使用します。
ただし、「わずかな」問題が見つかりました。検証は Web ページでは問題なく機能しますが、単体テストでは壊れてしまいます。調査の結果、属性の IsValid() メソッドが単体テストで直接呼び出されていることがわかりました...おそらく、属性がバリデーターにバインドされていないためです。
そのブログでは、セットアップ手順に従って RequiredIf 属性をバリデーターに登録しました。ただし、特定の単体テストの目的のために、テスト セットアップで検証をバインドする場所を見つける必要があります。
多かれ少なかれ論理的なオプションをいくつか試しました。
[Binding]
public class TestSteps
{
// Every test has to call this helper to load up the controller...
private void GoToHome()
{
// SNIP: Unimportant
DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...);
}
}
...テスト スイート ファイルと同様に...
// See attribute for why I figured this may be a logical choice.
[BeforeScenario]
public void Setup()
{
DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...);
}
...しかし、何らかの理由で、どちらの場所もRequiredIf()
その にバインドしませんRequiredIfValidator()
。
質問: ユニット テストの場合、属性 -> バリデーター バインディングをどこに配置すれば、ユニット テストで修飾されたプロパティが正しく検証されるようになりRequiredIf()
ますか?