Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 使用checkPermission的ApacheShiro单元测试通过,而不考虑存根权限_Unit Testing_Shiro - Fatal编程技术网

Unit testing 使用checkPermission的ApacheShiro单元测试通过,而不考虑存根权限

Unit testing 使用checkPermission的ApacheShiro单元测试通过,而不考虑存根权限,unit-testing,shiro,Unit Testing,Shiro,带Shiro starter 1.4.0的运行弹簧护套1.5.12 尝试编写一些单元测试来测试静态类,该类使用Subject接口的checkPermission检查权限 我正在模拟shiro主题,并将isPermitted方法存根为特定权限字符串返回false。。。但由于某些原因,它在执行Subject.checkPermission时会通过 Subject subjectUnderTest = mock(Subject.class); when(subjectUnderTest.isAuthe

带Shiro starter 1.4.0的运行弹簧护套1.5.12

尝试编写一些单元测试来测试静态类,该类使用Subject接口的checkPermission检查权限

我正在模拟shiro主题,并将isPermitted方法存根为特定权限字符串返回false。。。但由于某些原因,它在执行Subject.checkPermission时会通过

Subject subjectUnderTest = mock(Subject.class);
when(subjectUnderTest.isAuthenticated()).thenReturn(true);
when(subjectUnderTest.isPermitted(eq("review:edit:regional"))).thenReturn(false);
setSubject(subjectUnderTest);
subjectUnderTest.checkPermission("review:edit:regional");
我对Mockito相当陌生,但在本例中,如果isPermitted存根返回false,则希望checkPermission抛出AuthorizationException


如果我将实现更改为使用isPermitted,那么测试将按预期运行..但是当前实现使用的是checkPermission…

接口的方法
checkPermission()
将不会在自身上调用
isPermitted()
,而是在摘要上调用。
checkPermission()
的调用链如下所示:

Subject.checkPermissions()->
    DelegatingSubject.checkPermissions()->
        Authoriser.checkPermission()->
            AuthorizingRealm.checkPermission()->
            AuthorizingRealm.isPermitted()

因此,在
主题上模拟
ispermited()
将无效,因为
checkPermission()
将永远不会在此对象上调用它。要实现预期的行为,您必须在
AuthorizingRealm
AuthorizingSecurityManager
上模拟该方法,以防对
SecurityManager
的调用在测试中可用。

谢谢。我在玩被嘲笑的主题。然后进入了mockito的无效存根方法。。因此,这里的正确方法似乎是使用doNothing和doThrow模拟checkPermission pass和failure测试。其中doThrow()将抛出shiro AuthorizationException。