You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shiro.apache.org by bm...@apache.org on 2021/01/25 20:19:16 UTC

[shiro] 02/02: [SHIRO-811] convert more tests to Mockito

This is an automated email from the ASF dual-hosted git repository.

bmarwell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shiro.git

commit e5d8134d9457c87e63f97b441255012686a3056f
Author: Benjamin Marwell <bm...@apache.org>
AuthorDate: Mon Jan 25 17:11:44 2021 +0100

    [SHIRO-811] convert more tests to Mockito
---
 .../test/java/org/apache/shiro/web/WebTest.java    |  12 +-
 .../mgt/PathMatchingFilterChainResolverTest.java   | 121 ++++++++++-----------
 .../web/mgt/DefaultWebSecurityManagerTest.java     |  80 ++++++--------
 .../web/servlet/ShiroHttpServletRequestTest.java   |  79 ++++++++------
 4 files changed, 142 insertions(+), 150 deletions(-)

diff --git a/web/src/test/java/org/apache/shiro/web/WebTest.java b/web/src/test/java/org/apache/shiro/web/WebTest.java
index 22eeacc..25ced2f 100644
--- a/web/src/test/java/org/apache/shiro/web/WebTest.java
+++ b/web/src/test/java/org/apache/shiro/web/WebTest.java
@@ -18,21 +18,21 @@
  */
 package org.apache.shiro.web;
 
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.expect;
-
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 /**
  * @since 1.0
  */
 public abstract class WebTest {
 
     protected FilterConfig createNiceMockFilterConfig() {
-        FilterConfig mock = createNiceMock(FilterConfig.class);
-        ServletContext mockServletContext = createNiceMock(ServletContext.class);
-        expect(mock.getServletContext()).andReturn(mockServletContext);
+        FilterConfig mock = mock(FilterConfig.class);
+        ServletContext mockServletContext = mock(ServletContext.class);
+        when(mock.getServletContext()).thenReturn(mockServletContext);
         return mock;
     }
 
diff --git a/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java b/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java
index f13e8ea..90f5977 100644
--- a/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java
+++ b/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java
@@ -30,8 +30,13 @@ import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 /**
  * Tests for {@link org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver}.
@@ -58,14 +63,12 @@ public class PathMatchingFilterChainResolverTest extends WebTest {
     @Test
     public void testNewInstanceWithFilterConfig() {
         FilterConfig mock = createNiceMockFilterConfig();
-        replay(mock);
         resolver = new PathMatchingFilterChainResolver(mock);
         assertNotNull(resolver.getPathMatcher());
         assertTrue(resolver.getPathMatcher() instanceof AntPathMatcher);
         assertNotNull(resolver.getFilterChainManager());
         assertTrue(resolver.getFilterChainManager() instanceof DefaultFilterChainManager);
         assertEquals(((DefaultFilterChainManager) resolver.getFilterChainManager()).getFilterConfig(), mock);
-        verify(mock);
     }
 
     @Test
@@ -80,82 +83,78 @@ public class PathMatchingFilterChainResolverTest extends WebTest {
 
     @Test
     public void testGetChainsWithoutChains() {
-        ServletRequest request = createNiceMock(HttpServletRequest.class);
-        ServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        ServletRequest request = mock(HttpServletRequest.class);
+        ServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNull(resolved);
     }
 
     @Test
     public void testGetChainsWithMatch() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/index.html", "authcBasic");
 
-        expect(request.getServletPath()).andReturn("");
-        expect(request.getPathInfo()).andReturn("/index.html");
-        replay(request);
+        when(request.getServletPath()).thenReturn("");
+        when(request.getPathInfo()).thenReturn("/index.html");
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNotNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
     
     @Test
     public void testPathTraversalWithDot() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/index.html", "authcBasic");
 
-        expect(request.getServletPath()).andReturn("/");
-        expect(request.getPathInfo()).andReturn("./index.html");
-        replay(request);
+        when(request.getServletPath()).thenReturn("/");
+        when(request.getPathInfo()).thenReturn("./index.html");
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNotNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
     
     @Test
     public void testPathTraversalWithDotDot() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/index.html", "authcBasic");
-        expect(request.getServletPath()).andReturn("/public/");
-        expect(request.getPathInfo()).andReturn("../index.html");
-        replay(request);
+        when(request.getServletPath()).thenReturn("/public/");
+        when(request.getPathInfo()).thenReturn("../index.html");
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNotNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
 
     @Test
     public void testGetChainsWithoutMatch() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/index.html", "authcBasic");
 
-        expect(request.getServletPath()).andReturn("/");
-        expect(request.getPathInfo()).andReturn(null);
-        replay(request);
+        when(request.getServletPath()).thenReturn("/");
+        when(request.getPathInfo()).thenReturn(null);
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
 
     /**
@@ -163,20 +162,19 @@ public class PathMatchingFilterChainResolverTest extends WebTest {
      */
     @Test
     public void testGetChain() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/resource/book", "authcBasic");
 
-        expect(request.getServletPath()).andReturn("");
-        expect(request.getPathInfo()).andReturn("/resource/book");
-        replay(request);
+        when(request.getServletPath()).thenReturn("");
+        when(request.getPathInfo()).thenReturn("/resource/book");
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNotNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
 
     /**
@@ -184,20 +182,19 @@ public class PathMatchingFilterChainResolverTest extends WebTest {
      */
     @Test
     public void testGetChainEqualUrlSeparator() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/", "authcBasic");
 
-        expect(request.getServletPath()).andReturn("/");
-        expect(request.getPathInfo()).andReturn(null);
-        replay(request);
+        when(request.getServletPath()).thenReturn("/");
+        when(request.getPathInfo()).thenReturn(null);
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNotNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
 
     /**
@@ -205,20 +202,19 @@ public class PathMatchingFilterChainResolverTest extends WebTest {
      */
     @Test
     public void testGetChainEndWithUrlSeparator() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/resource/book", "authcBasic");
 
-        expect(request.getServletPath()).andReturn("");
-        expect(request.getPathInfo()).andReturn("/resource/book");
-        replay(request);
+        when(request.getServletPath()).thenReturn("");
+        when(request.getPathInfo()).thenReturn("/resource/book");
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNotNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
 
     /**
@@ -226,19 +222,18 @@ public class PathMatchingFilterChainResolverTest extends WebTest {
      */
     @Test
     public void testGetChainEndWithMultiUrlSeparator() {
-        HttpServletRequest request = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse response = createNiceMock(HttpServletResponse.class);
-        FilterChain chain = createNiceMock(FilterChain.class);
+        HttpServletRequest request = mock(HttpServletRequest.class);
+        HttpServletResponse response = mock(HttpServletResponse.class);
+        FilterChain chain = mock(FilterChain.class);
 
         //ensure at least one chain is defined:
         resolver.getFilterChainManager().addToChain("/resource/book", "authcBasic");
 
-        expect(request.getServletPath()).andReturn("");
-        expect(request.getPathInfo()).andReturn("/resource/book//");
-        replay(request);
+        when(request.getServletPath()).thenReturn("");
+        when(request.getPathInfo()).thenReturn("/resource/book//");
 
         FilterChain resolved = resolver.getChain(request, response, chain);
         assertNotNull(resolved);
-        verify(request);
+        verify(request).getServletPath();
     }
 }
diff --git a/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java b/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java
index 21c440b..443b030 100644
--- a/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java
+++ b/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java
@@ -42,8 +42,16 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.Serializable;
 
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 /**
  * @since 0.9
@@ -62,6 +70,7 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
         sm.setRealm(new IniRealm(ini));
     }
 
+    @Override
     @After
     public void tearDown() {
         sm.destroy();
@@ -75,17 +84,15 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
 	@Test
 	public void checkSessionManagerDeterminesContainerSessionMode() {
 		sm.setSessionMode(DefaultWebSecurityManager.NATIVE_SESSION_MODE);
-		WebSessionManager sessionManager = createMock(WebSessionManager.class);
+		WebSessionManager sessionManager = mock(WebSessionManager.class);
 
-		expect(sessionManager.isServletContainerSessions()).andReturn(true).anyTimes();
-
-		replay(sessionManager);
+		when(sessionManager.isServletContainerSessions()).thenReturn(true);
 
 		sm.setSessionManager(sessionManager);
 
 		assertTrue("The set SessionManager is not being used to determine isHttpSessionMode.", sm.isHttpSessionMode());
 
-		verify(sessionManager);
+		verify(sessionManager).isServletContainerSessions();
 	}
 
     @Test
@@ -103,13 +110,12 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
 
     @Test
     public void testLogin() {
-        HttpServletRequest mockRequest = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse mockResponse = createNiceMock(HttpServletResponse.class);
+        HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+        HttpServletResponse mockResponse = mock(HttpServletResponse.class);
 
-        expect(mockRequest.getCookies()).andReturn(null);
-        expect(mockRequest.getContextPath()).andReturn("/");
+        when(mockRequest.getCookies()).thenReturn(null);
+        when(mockRequest.getContextPath()).thenReturn("/");
 
-        replay(mockRequest);
 
         Subject subject = newSubject(mockRequest, mockResponse);
 
@@ -119,7 +125,7 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
 
         assertTrue(subject.isAuthenticated());
         assertNotNull(subject.getPrincipal());
-        assertTrue(subject.getPrincipal().equals("lonestarr"));
+        assertEquals("lonestarr", subject.getPrincipal());
     }
 
     @Test
@@ -128,13 +134,11 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
         long globalTimeout = 100;
         ((AbstractSessionManager) sm.getSessionManager()).setGlobalSessionTimeout(globalTimeout);
 
-        HttpServletRequest mockRequest = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse mockResponse = createNiceMock(HttpServletResponse.class);
-
-        expect(mockRequest.getCookies()).andReturn(null);
-        expect(mockRequest.getContextPath()).andReturn("/");
+        HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+        HttpServletResponse mockResponse = mock(HttpServletResponse.class);
 
-        replay(mockRequest);
+        when(mockRequest.getCookies()).thenReturn(null);
+        when(mockRequest.getContextPath()).thenReturn("/");
 
         Subject subject = newSubject(mockRequest, mockResponse);
 
@@ -154,22 +158,16 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
     public void testGetSubjectByRequestResponsePair() {
         shiroSessionModeInit();
 
-        HttpServletRequest mockRequest = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse mockResponse = createNiceMock(HttpServletResponse.class);
+        HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+        HttpServletResponse mockResponse = mock(HttpServletResponse.class);
 
-        expect(mockRequest.getCookies()).andReturn(null);
-
-        replay(mockRequest);
-        replay(mockResponse);
+        when(mockRequest.getCookies()).thenReturn(null);
 
         Subject subject = newSubject(mockRequest, mockResponse);
 
-        verify(mockRequest);
-        verify(mockResponse);
-
         assertNotNull(subject);
         assertTrue(subject.getPrincipals() == null || subject.getPrincipals().isEmpty());
-        assertTrue(subject.getSession(false) == null);
+        assertNull(subject.getSession(false));
         assertFalse(subject.isAuthenticated());
     }
 
@@ -178,11 +176,8 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
 
         shiroSessionModeInit();
 
-        HttpServletRequest mockRequest = createNiceMock(HttpServletRequest.class);
-        HttpServletResponse mockResponse = createNiceMock(HttpServletResponse.class);
-
-        replay(mockRequest);
-        replay(mockResponse);
+        HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+        HttpServletResponse mockResponse = mock(HttpServletResponse.class);
 
         Subject subject = newSubject(mockRequest, mockResponse);
 
@@ -191,27 +186,18 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes
 
         assertNotNull(sessionId);
 
-        verify(mockRequest);
-        verify(mockResponse);
-
-        mockRequest = createNiceMock(HttpServletRequest.class);
-        mockResponse = createNiceMock(HttpServletResponse.class);
+        mockRequest = mock(HttpServletRequest.class);
+        mockResponse = mock(HttpServletResponse.class);
         //now simulate the cookie going with the request and the Subject should be acquired based on that:
         Cookie[] cookies = new Cookie[]{new Cookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME, sessionId.toString())};
-        expect(mockRequest.getCookies()).andReturn(cookies).anyTimes();
-        expect(mockRequest.getParameter(isA(String.class))).andReturn(null).anyTimes();
-
-        replay(mockRequest);
-        replay(mockResponse);
+        when(mockRequest.getCookies()).thenReturn(cookies);
+        when(mockRequest.getParameter(any(String.class))).thenReturn(null);
 
         subject = newSubject(mockRequest, mockResponse);
 
         session = subject.getSession(false);
         assertNotNull(session);
         assertEquals(sessionId, session.getId());
-
-        verify(mockRequest);
-        verify(mockResponse);
     }
 
     /**
diff --git a/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java b/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java
index 85da229..b74911a 100644
--- a/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java
+++ b/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java
@@ -18,54 +18,64 @@
  */
 package org.apache.shiro.web.servlet;
 
-import static org.easymock.EasyMock.*;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.subject.Subject;
+import org.apache.shiro.util.ThreadContext;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
+import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.shiro.session.Session;
-import org.apache.shiro.subject.Subject;
-import org.apache.shiro.util.ThreadContext;
-import org.junit.Before;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
-import junit.framework.TestCase;
+public class ShiroHttpServletRequestTest {
 
-public class ShiroHttpServletRequestTest extends TestCase {
+    private ShiroHttpServletRequest request;
 
-	private ShiroHttpServletRequest request;
-	
-	private HttpServletRequest mockRequest;
-    private ServletContext mockContext;
-    private Subject mockSubject;
-	
-    @Before
+    private HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+    private ServletContext mockContext = mock(ServletContext.class);
+    private Subject mockSubject = mock(Subject.class);
+
+    @BeforeEach
     public void setUp() throws Exception {
-    	this.mockRequest = createMock(HttpServletRequest.class);
-    	this.mockContext = createMock(ServletContext.class);
-    	this.mockSubject = createMock(Subject.class);
-    	
-    	ThreadContext.bind(this.mockSubject);
-    	this.request = new ShiroHttpServletRequest(mockRequest, mockContext, false);
+        ThreadContext.bind(this.mockSubject);
+        this.request = new ShiroHttpServletRequest(mockRequest, mockContext, false);
     }
     
     /**
      * Test asserting <a href="https://issues.apache.org/jira/browse/SHIRO-637">SHIRO-637<a/>.
      */
     @Test
-    public void testRegetSession() throws Exception {
-        Session session1 = createMock(Session.class);
-        Session session2 = createMock(Session.class);
-    	
+    public void testRegetSession() {
+        Session session1 = mock(Session.class);
+        Session session2 = mock(Session.class);
+        AtomicInteger counter = new AtomicInteger();
+        AtomicInteger counterFalse = new AtomicInteger();
+
         mockSubject.logout();
-        expect(mockSubject.getSession(true))
-           .andReturn(session1).times(1)
-           .andReturn(session2).times(1);
-        expect(mockSubject.getSession(false))
-            .andReturn(session1).times(2)
-            .andReturn(null).times(3);
-        replay(mockSubject);
-        
+        when(mockSubject.getSession(true)).then(args -> {
+            if (counter.getAndIncrement() == 1) {
+                return session1;
+            }
+
+            return session2;
+        });
+        when(mockSubject.getSession(false)).then(args -> {
+           if (counterFalse.getAndIncrement() < 2) {
+               return session1;
+           }
+
+           return null;
+        });
+
         assertNotNull(request.getSession(true));
         assertNotNull(request.getSession(false));
         
@@ -73,6 +83,7 @@ public class ShiroHttpServletRequestTest extends TestCase {
         
         assertNull(request.getSession(false));
         assertNotNull(request.getSession(true));
-        verify(mockSubject);
+        verify(mockSubject, times(2)).getSession(true);
+        verify(mockSubject, atLeast(3)).getSession(false);
     }
 }