Java Netty HttpHeaders.isKeepAlive(请求)在单元测试中引发空异常

Java Netty HttpHeaders.isKeepAlive(请求)在单元测试中引发空异常,java,unit-testing,mocking,mockito,netty,Java,Unit Testing,Mocking,Mockito,Netty,我试图对一些遗留代码进行单元测试,以确保新特性不会破坏旧功能。不幸的是,这段遗留代码有一些糟糕的设计特性(循环依赖、传递大量变量、糟糕的风格等)。而且,这些遗留代码存在于一个“很快”就会被完全抛弃的代码库中,因此花费大量时间重构、清理和升级它并不是时间的最佳利用。最后,我们使用的是Netty的旧版本(3.10.5.Final),无法升级 我已经模拟了很多变量和接口,以使代码甚至可以在不轰炸的情况下运行单元测试。我遇到的最后一个障碍是,这行代码总是抛出一个null异常: if (!HttpHead

我试图对一些遗留代码进行单元测试,以确保新特性不会破坏旧功能。不幸的是,这段遗留代码有一些糟糕的设计特性(循环依赖、传递大量变量、糟糕的风格等)。而且,这些遗留代码存在于一个“很快”就会被完全抛弃的代码库中,因此花费大量时间重构、清理和升级它并不是时间的最佳利用。最后,我们使用的是Netty的旧版本(3.10.5.Final),无法升级

我已经模拟了很多变量和接口,以使代码甚至可以在不轰炸的情况下运行单元测试。我遇到的最后一个障碍是,这行代码总是抛出一个null异常:

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)

请显示堆栈跟踪。添加了堆栈跟踪,但不确定它会有多大帮助。但是如果它能帮助你解决这个问题,那就太好了。