Netty HttpHeaders.isKeepAlive(request)在单元测试中抛出null异常

时间:2018-05-15 21:11:54

标签: java unit-testing mocking mockito netty

我正在尝试对一些遗留代码进行单元测试,以确保新功能不会破坏旧功能。不幸的是,这个遗留代码有一些糟糕的设计特性(循环依赖,传递大量变量,不良风格等)。此外,这些遗留代码存在于一个代码库中,将很快被“完全”抛弃,因此花费大量时间来重构它,清理它并升级它并不是最好的时间利用。最后,我们使用旧版本的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)

0 个答案:

没有答案