3

我正在使用 Mockito 来模拟HttpServletRequestHttpServletResponse. 我想在我创建的模拟请求中添加 cookie。我该怎么做?

我也在服务器端的响应中设置cookie。如何从服务器发送的模拟响应中检索 cookie?

4

5 回答 5

5

你可以尝试这样的事情。

import javax.servlet.http.Cookie;

@RunWith(MockitoJUnitRunner.class)
public class TestClass {

    private MockHttpServletRequest servletRequest;

    @Before
    public void setUp() {
        servletRequest = new MockHttpServletRequest();
        Cookie[] cookies = new Cookie[]{
            new Cookie("test_key", "test_value")
        };
        servletRequest.setCookies(cookies);
    }

    @Test
    public void methodTest() {
        Assert.assertEquals("test_value", servletRequest.getCookies() 
        [0].getValue());
    }

}
于 2020-05-12T11:24:41.047 回答
3
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

class ComponentTests {

    private HttpServletRequest testRequest = Mockito.mock(HttpServletRequest.class);

    @Test
    void testMethod() {
        Cookie[] testCookies = new Cookie[]{new Cookie("name", "value")};
        Mockito.when(testRequest.getCookies()).thenReturn(testCookies);

        // Assertions
    }

}
于 2020-12-15T19:33:19.257 回答
1

对于请求:构造数组,添加任何Cookies你想要的,然后将行为添加到模拟中:

final Cookies[] cookies = new Cookies[] { ... };

final HttpServletRequest request = mock(HttpServletRequest.class);
given(request.getCookies()).thenReturn(cookies);

... pass to controller/servlet etc ...

对于响应,您创建模拟,然后addCookie通过使用ArgumentCaptor捕获传递给的实际 cookie 来验证调用addCookie

final ArgumentCapor<Cookie> captor = ArgumentCaptor.forClass(Cookie.class);

verify(response).addCookie(captor.capture());

final List<Cookie> cookies = captor.getValue();

... perform asserion on cookies ...

或者构建预期的 cookie 并验证:

final Cookie expectedCookie = ...

verify(response).addCookie(expectedCookie);

就我个人而言,我不喜欢使用 an ArgumentCaptor,但这在很大程度上取决于您的测试。

于 2013-06-11T09:14:53.810 回答
1

使用实现 HttpServletResponse 的 MockHttpServletResponse。它有 getCookies / getCookie 方法,可以在其上进行断言。

于 2017-04-03T10:13:21.243 回答
0

最好的方法是使用 SpringMockHttpServletRequestMockHttpServletResponse.

它们是带有 cookie 获取器的包装器实现。这些正是您确保可以验证 cookie 设置所需要的。Mockito 在这里是不够的。

于 2019-05-24T19:46:31.100 回答