java - 如何编写单元测试用例来测试会话 cookie 的安全属性
问题描述
我最近在一个 servlet 中添加了一段代码,它基本上为会话 cookie 添加了一个“安全”属性。
String encryptedSessionId = encryptionProxy.strongEncrypt(request.getSession().getId());
response.setHeader("SET-COOKIE", "JSESSIONID=" + encryptedSessionId + "; secure");
我想编写一个 Junit 测试用例来检查是否将“安全”属性添加到会话 cookie 中。
我试图模拟会话、请求和响应对象来编写测试用例,但它没有按预期工作并抛出 NullPointerException
我的测试用例,
@Test
public void testMethod() {
MockHttpServletRequest request = Mockito.mock(MockHttpServletRequest.class);
HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
HttpSession session = new MockHttpSession(null, (String) request.getSession().getAttribute("secure"));
//VcfoWelcomeOptInEnrollmentServlet vcfoWelcomeOptInEnrollmentServlet = Mockito.mock(VcfoWelcomeOptInEnrollmentServlet.class);
//when(session.getAttribute("secure")).thenReturn("secure");
//System.out.println(response.getHeader("SET-COOKIE"));
when(response.getHeader("SET-COOKIE")).thenReturn("secure");
}
我保留了测试用例的原样,以便您可以了解我迄今为止尝试过的事情。
我想知道我的方法有什么问题?另外,编写成功的单元测试用例的正确方法是什么。
任何帮助,将不胜感激!
我正在使用 Junit 4 和 Mockito 2
错误堆栈
java.lang.NullPointerException
at com.xxx.accountLink.vcfo.client.servlet.ServletTest.testMethod(ServletTest.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:613)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:288)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
解决方案
推荐阅读
- python - 我需要将打印命令的输出保存到列表中
- javascript - tap() 内部的 Observables 完成
- javascript - 发送数千个获取请求会使浏览器崩溃。记不清
- mysql - 更新记录 vb.net 和 mysql 期间输入字符串格式不正确消息错误
- logging - 在 Rider 中运行 dotnet core 应用程序时如何显示日志?
- javascript - 是否可以在没有 node.js 的情况下使用 socket.io?
- r - 计算沿线的距离,每个点将相交
- python - 如何从 pandas 数据框中的 url 检索图像并将它们作为 PIL 对象存储在新列中
- python - 使用 ModelChoiceField 在 Django 表单中显示 pk 以外的字段
- spss-modeler - 建模者问题:SPSS 中是否有用于多个“if”语句的函数?预测日期