gpt4 book ai didi

java - Junit 测试中 SpringCloud Azure 适配器出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 00:23:46 24 4
gpt4 key购买 nike

我使用 SpringCloud 对 Azure Functions 测试服务进行 junit 测试时遇到了一个相当无用的 NullPointerException。我对此完全是新手,所以如果这看起来很明显,我深表歉意。

堆栈跟踪:

java.lang.NullPointerException   
at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.doResolveName(AzureSpringBootRequestHandler.java:86)
at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.initFunctionConsumerOrSupplierFromCatalog(AbstractSpringFunctionAdapterInitializer.java:387)
at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.initialize(AbstractSpringFunctionAdapterInitializer.java:124)
at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.handleRequest(AzureSpringBootRequestHandler.java:58)
at test.TestCloud.start(TestCloud.java:42)

我认为 NPE 可能是由于我将 null 传递到 handleRequest 的第二个参数而引起的,但这就是我查看的示例所做的。我已经尝试使用注释行或其下面的行,使用我所做的具体扩展或通用版本。两者的行为相同,并且控制永远不会到达执行方法。该示例使用通用类,但具体实现对我来说似乎更有意义(否则我看不到如何建立连接)。

    @Test
public void start() throws Exception {
// AzureSpringBootRequestHandler<String, String> handler = new AzureSpringBootRequestHandler<String, String>(CloudFunctionApplication.class);
AzureReverseAdapter handler = new AzureReverseAdapter(CloudFunctionApplication.class);
String result = handler.handleRequest("Hello World", null);
handler.close();
Assert.assertEquals(result, "dlroW olleH");
}

测试类现在只有一个函数,如下所示。

@FunctionName("reverseString")
public String execute(@HttpTrigger(name = "request", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, ExecutionContext context) {

context.getLogger().info("Input: " + request.getBody().get());
return handleRequest(request.getBody().get(), context);
}

CloudFunctionApplication 类有一个如下所示的方法。奇怪的是,我不知道如何,但控制确实可以到达此功能。我认为执行方法应该充当重定向,但它似乎无论如何都找到了reserveString。我猜是因为它是唯一的@FunctionName?

就是这个方法。 return(value) -> { 行上的断点被断点击中,但在调用内部之前发生了异常。

@Bean
public Function<String, String> reverseString() {
return (value) -> {
return new StringBuilder(value).reverse().toString();
};
}

更新:链接的问题绝对不是这个问题的重复。是的,所有 NullPointerException 都是因为当您尝试取消引用某些内容时它为 null。该链接是对此的一般处理。这是一个关于为什么我从第三方库获取它的具体问题。所以它们绝对不一样。

但是,我按照评论中的建议发现了问题。我将 null 作为第二个参数传递。这似乎是允许的,因为我正在研究的示例也做了同样的事情。我的解决方案是模拟创建一个返回基本值的 ExecutionContext 对象。不幸的是,我无法将其记录为答案,因为有人认为我只是在问 NullPointerException 是什么,并将该问题标记为骗局。

因此,对于遇到同样问题的其他人,这就是我的答案。

最佳答案

在示例中,您基于 HelloFunctionTest 类的第一个语句在 <> 括号之间没有类型声明:

AzureSpringBootRequestHandler<User, Greeting> handler = new AzureSpringBootRequestHandler<>(HelloFunction.class);

但是,您的等效项(据我所知,AzureSpringBootRequestHandler)确实如此,并且已经(见下文)。我个人会从这里开始,但如果没有链接来查看代码,就很难确定。

AzureSpringBootRequestHandler<String, String> handler = new AzureSpringBootRequestHandler<String, String>(CloudFunctionApplication.class);

很难根据给定的基本示例来跟踪您的问题,因为在理解示例之前您已经偏离了自己的切线。我建议您按照示例进行操作,以便您真正理解它,然后继续执行您自己的实现,否则您最终会陷入困境并感到非常困惑!

关于java - Junit 测试中 SpringCloud Azure 适配器出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58067882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com