我正在尝试对一些遗留代码进行单元测试,以确保新功能不会破坏旧功能。不幸的是,这个遗留代码有一些糟糕的设计特性(循环依赖,传递大量变量,不良风格等)。此外,这些遗留代码存在于一个代码库中,将很快被“完全”抛弃,因此花费大量时间来重构它,清理它并升级它并不是最好的时间利用。最后,我们使用旧版本的Netty(3.10.5.Final)并且无法升级。
我不得不模拟很多变量和接口,以使代码甚至可以在没有轰炸的情况下运行单元测试。我陷入的最后一个障碍是这行代码总是抛出一个空的异常:
if (!HttpHeaders.isKeepAlive(request)) {
我试图填充HttpHeaders对象,确保我的请求和响应有正确的标题,我甚至试图模拟方法调用:
when(HttpHeaders.isKeepAlive(any())).thenReturn(true);
但没有任何作用。实际上,当我模拟方法调用时,它也会抛出一个null异常。
但是,对此对象的其他调用工作正常:
HttpHeaders.addHeader(httpResponse, "keepAlive", true);
我不熟悉HttpHeaders对象如何填充,如何模拟.isKeepAlive调用,或者为什么此函数返回null异常。任何想法或想法将不胜感激。
编辑:
添加请求的堆栈跟踪
java.lang.NullPointerException
at org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive(HttpHeaders.java:553)
at com.apifest.BackEndResponseListener.responseReceived(BackEndResponseListener.java:93)
at com.apifest.BackEndResponseListenerTest.NewTest_OK_LogsSuccessful(BackEndResponseListenerTest.java:117)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:756)
at org.testng.TestRunner.run(TestRunner.java:610)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1306)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1231)
at org.testng.TestNG.runSuites(TestNG.java:1146)
at org.testng.TestNG.run(TestNG.java:1117)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)