如何测试是否调用了流畅的服务方法

时间:2010-09-08 15:33:33

标签: unit-testing rhino-mocks fluent rhino-security

我有一个安全规则,即新注册的用户对自己的用户实体拥有完全权限。我正在使用Rhino.Security并且代码工作正常,但我想创建一个单元测试,以确保进行适当的调用以设置权限。以下是代码的简化版本:

public User Register(UserRegisterTask userRegistrationTask) {
   User user = User.Create(userRegistrationTask);
   this.userRepository.Save(user);

   // Give this user permission to do operations on itself
   this.permissionsBuilderService.Allow("Domain/User")
       .For(user)
       .On(user)
       .DefaultLevel()
       .Save();

   return user;
}

我已经模拟了userRepository和permissionBuilderService,但是permissionBuilderService的流畅接口需要从链中的每个方法调用返回不同的对象(即.Allow(...)。For(...)。 (...)等)。但我找不到模拟链中每个对象的方法。

有没有办法测试是否正在调用permissionBuilderService的Allow方法但是忽略了链的其余部分?

由于 丹

1 个答案:

答案 0 :(得分:0)

我也碰到了这个并最终将Rhino Security功能包装在服务层中有两个原因:

  1. 它正在对一个真正的PITA进行单元测试,在花了几个小时撞到砖墙后,这种方法让我更容易模拟这一层。
  2. 我开始觉得Rhino Security与我的控制器紧密耦合(我的应用程序使用MVC)。将调用包装在另一层中允许我更松散地耦合到特定的安全实现,并允许我轻松地将其与另一个 - 如果我这样选择 - 将来交换出来。
  3. 显然,这只是一种方法。但它让我的生活更加轻松......