我有一个处理密码更改和交换邮箱过期检查的类。
我检查UserPrincipal上的LastPasswordSet。

现在,TDD呢?

我想通过编写一些测试来检查我的类(class)是否正确处理了密码检查。但是我无法理解如何模拟UserPrincipal.FindByIdentity(principalContext,[某些用户名])。

我将要编写一个方法,如果密码在最近90天内已更改,则返回true/false。因此,我想模拟UserPrincipal,以便可以在测试中设置LastPasswordSet返回值,只是为了检查要为“密码需要更改通知”编写的逻辑。

最佳答案

我会用精妙的短语回答

“不要 mock 您不拥有的类型”

找不到权威的博客文章来对此进行支持。 Sample link。尽管它似乎可以归因于乔·沃尔恩斯。

我记得UserPrincipal是与身份验证相关的.Net框架类。无法控制的模拟类型(可以更改)可能导致脆弱的测试。

而是从UserPrincipal发现您的设计需要什么

  • 通过TDDing客户端
  • 找到UserPrincipal间接实现或实现的角色
  • 在您的单元测试中模拟该角色并测试所有调用者。
  • 具有“集成测试”,以确保您的实际实现在调用时在UserPrincipal上按下正确的按钮。
  • 依靠端到端/验收测试来发现将所有组件串在一起时发生的错误。
  • 关于c# - 模拟用户主体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7144959/

    10-11 15:42