私はmvcアプリケーションを持っています。私はpocoオブジェクトとユニットテストを作成しています。問題は、すべてのテストが、このコード行Roles.IsUserInRole( "someUser"、 "role")に達すると失敗することです。私はロールまたは新しいインターフェイスまたはリポジトリを実装する必要がありますか? Thxユニットテスト(mvc) - ロールに関する問題
4
A
答えて
10
コード化された単体テストでRoles.IsUserInRole機能をモックしようとすると、同じ問題が発生しました。私のソリューションは、RoleProviderと呼ばれる新しいクラス、その後System.Web.Security.Roles.IsUserInRoleと呼ばれる方法のisUserInRoleとのインタフェースを作成することでした。
public class RoleProvider: IRoleProvider
{
public bool IsUserInRole(IPrincipal userPrincipal)
{
return System.Web.Security.Roles.IsUserInRole(userPrincipal.Identity.Name, "User");
}
}
はその後、私のコードで私はRoleProvider isUserInRoleメソッドを呼び出します。このことができます
var roleProvider = MockRepository.GenerateStub<IRoleProvider>();
roleProvider.Expect(rp => rp.IsUserInRole(userPrincipal)).Return(true);
希望:あなたがここに示されているあなたは、あなたのテストでIRoleProviderを模擬することができますインターフェイス、例を持っているとしてRhinoのモックを使用しています。
0
テストで異なる動作をするロールをチェックするカスタムメソッドを設定できますが、標準メソッドで動作するコンテキストをテストに設定することをお勧めします。
0
あなたは述語/ FUNCを有する光ラッパーを作成することができます。
public static Predicate<string> IsUserInRole = role => Roles.IsUserInRole(role);
次に、Roles.IsUserInRole()の代わりにIsUserInRole()を使用します。実行時に同じ動作が得られます。あなたが公共の静的な、あなたのコンストラクタを介して述語を注入し、プライベート読み取り専用としてそれを格納することができを持っていないことを好む場合は、RoleProvider
MyClass.IsUserInRole = role => true;
にアクセスしないように、しかし、テスト時に、あなたは関数をオーバーライドすることができます。
class MyClass
{
private readonly Predicate<string> IsUserInRole;
MyClass(Predicate<string> roleChecker) { this.IsUserInRole = roleChecker }
MyClass() : this(role => Roles.IsUserInRole(role)) { }
}
モックを使用する場合は、モックを返してから戻り値を制御したり、メソッドが呼び出されたことを確認したりできます。そして、どのパラメタ値が述語に送られたのか確認してください。
Mock<Predicate<string>> mockRoleChecker = new Mock<Predicate<string>>();
var cut = new MyClass(mockRoleChecker.Object);
var expectedRole = "Admin";
mockRoleChecker.SetReturnsDefault<bool>(true); // if not specified will return false which is default(bool)
cut.MyMethod();
mockRoleChecker.Verify(x => x(expectedRole), Times.Once());
関連する問題
- 1. MVC 3のカスタムコレクションモデルバインダーに関する問題
- 2. asp.net mvcのjsonに関する問題
- 3. MVC Scorm sequencing PartialViewに関する問題
- 4. mvcのHttpContextに関する問題2
- 5. ユニットテストの問題Mock
- 6. Unity3dユニットテストの問題
- 7. Grailsユニットテストの問題
- 8. Node.jsユニットテストの問題
- 9. Androidピッチとロールの問題
- 10. ロールと権限の問題
- 11. ASP.NET問題Cookieでロールをキャッシュする
- 12. ユニットテストでのXmlSerializerの問題
- 13. ユニットテストでのResharperの問題
- 14. Vue.js(2.0)ユニットテストの問題
- 15. Pythonのユニットテスト:アサーションエラー問題
- 16. Nullable列挙型のASP.NET MVCドロップダウンエディタテンプレートに関する問題
- 17. asp.net mvcのjavascript変数に関する問題
- 18. mvcのON DUPLICATE KEY UPDATEに関する問題
- 19. ASP.NET Core MVCのViewBagに関する問題
- 20. 春3 mvcの@PathVariable URLの検証に関する問題
- 21. JQueryでのMVCフォームの検証、オブジェクトに関する問題
- 22. Spring MVCでのコントローラマッピングに関する問題
- 23. MVCのRazor Viewでの検証に関する問題
- 24. Spring 3 MVC、マルチパートフォームとコントローラのマッピングに関する問題
- 25. Ajaxに関する問題Asp.Net MVCをクリック
- 26. ExtJS 4.0 MVCアプリケーションのTreeStoreに関する問題
- 27. 問題MVC
- 28. ユニットテストのMVCコントローラ
- 29. MVCユニットテスト
- 30. laravelプロジェクトのロールと権限の問題
あなたの質問にお答えするには十分な情報がありません。あなたの質問に詳細を追加/追加/追加することを検討してください。 – Kendrick
なぜ失敗するのですか?例外の詳細と使用しているフレームワークを投稿できますか?ほとんどのフレームワークでは、失敗するタイプの例外が使用されるため、テストの分離によって失敗または例外が発生する可能性があります。 – StuperUser
私はコントローラの[unit-testing-security-model-clickonce](http://stackoverflow.com/questions/4585174/unit-testing-security-model-clickonce/4585686#4585686)のようなロールテストを実装しました – k3b