【问题标题】:Mock MembershipProvider with custom methods使用自定义方法模拟 MembershipProvider
【发布时间】:2012-10-17 22:48:34
【问题描述】:

我正在开发一个 ASP.NET MVC 应用程序。我正在使用自定义 MembershipProvider (MyCustomMembershipProvider) 来访问会员信息,因为我们已经有一个数据库,其中包含我需要使用的自己的架构。

我正在使用类似于 NerdDinner 2 示例的类,其中我有一个包含 MembershipProvider 的 AccountMembershipService(实现 IMembershipService),因此我可以注入不同的模拟提供程序。但是,我使用 CreateUser 和 ChangePassword 的几种不同方法扩展了 MyCustomMembershipProvider。这些方法在 MembershipProvider 中不可用,除非您知道它是自定义方法。

我是不是搞错了?我是否需要另一层作为包含我的新提供程序方法的接口?

【问题讨论】:

  • 我是 MVC 和模拟测试的新手,所以我可能无法很好地解释这种情况。我有一个 AccountMembershipService,它将 MembershipProvider 作为构造函数中的参数。这样,当我运行应用程序时,传入的 MembershipProvider 是 MyCustomMembershipProvider……而当我在测试时,传入的 MembershipProvider 是 MockMembershipProvider。因此,当我在 AccountMembershipService 上调用 CreateUser 时,CreateUser 在 AccountMembershipServices 包含的 MembershipProvider 上不可用。

标签: asp.net-mvc mocking asp.net-membership


【解决方案1】:

我不确定我是否理解您的问题。如果您在 MembershipProvider 上使用包装器接口,那么提供者实现的方法无关紧要,因为您的应用仅使用该接口,您可以将接口更改为您想要的任何内容。

或者您是在问如何从您的自定义提供程序调用您的自定义方法?如果是这样,那么所有关于嘲笑的东西都只是红鲱鱼,因为它与问题无关。

如果这确实是您的问题,那么您只需将 Membership.Provider 方法转换为您的提供者的类型。像这样的:

var myProvider = Membership.Provider as MyCustomerMembershipProvider;
myProvider.CreateUser(...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多