Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何测试是否调用了fluent服务方法_Unit Testing_Rhino Mocks_Fluent_Rhino Security - Fatal编程技术网

Unit testing 如何测试是否调用了fluent服务方法

Unit testing 如何测试是否调用了fluent服务方法,unit-testing,rhino-mocks,fluent,rhino-security,Unit Testing,Rhino Mocks,Fluent,Rhino Security,我有一个安全规则,即新注册的用户对自己的用户实体拥有完全权限。我使用的是Rhino.Security,代码运行良好,但我想创建一个单元测试,以确保进行了适当的调用来设置权限。下面是代码的简化版本: public User Register(UserRegisterTask userRegistrationTask) { User user = User.Create(userRegistrationTask); this.userRepository.Save(user);

我有一个安全规则,即新注册的用户对自己的用户实体拥有完全权限。我使用的是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(…).On(…)等)。但是我找不到一种方法来模拟链中的每个对象

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

谢谢
Dan

我也遇到了这个问题,最终将Rhino安全功能包装到服务层,原因有两个:

  • 它使单元测试成为一个真正的PITA,在花了几个小时的时间将我的头撞在砖墙上之后,这种方法使我能够更轻松地模拟这一层
  • 我开始觉得Rhino安全性与我的控制器紧密耦合(我的应用程序使用MVC)。将调用包装到另一层可以使我更松散地耦合到特定的安全实现,并允许我在将来轻松地将其与另一层交换(如果我选择的话)

  • 显然,这只是一种方法。但这让我的生活变得轻松多了…

    真正的permissionsBuilderService有什么副作用吗?(即,是否可能在测试中使用真实的数据库?)真实的permissionsBuilderService希望附加真实的数据库。这是可能的,但需要设置数据库,并在每种测试中拆除它。我希望有一些要求不那么高的东西。