gpt4 book ai didi

java - Camel : Add TypeConverter in Test Case

转载 作者:行者123 更新时间:2023-12-01 20:03:38 24 4
gpt4 key购买 nike

嘿,

我目前正在编写一个测试用例,其中在某些时候,我需要将自己编写的模型对象自动类型转换为字符串。
当“实时”执行代码时,它可以工作,因为其他组件随后会启动,但在测试用例中它们不会,这就是为什么我需要在测试用例中添加模拟类型转换。

这就是我到目前为止所做的,但它似乎不起作用,因为类型转换崩溃了(org.apache.camel.TypeConversionException:从类型进行类型转换时出错:com.....MyClass到所需的类型:java.lang.String)

context // Autowired in the test class
.getTypeConverterRegistry().addTypeConverters(new TypeConverters() {
@Converter
public String myClassToString(MyClass file) {
if (file.getName().equals(expectedFileName)) {
return fileContent;
} else {
throw new IllegalArgumentException(
"Unknown file for Mock TypeConverter: " + file.getName());
}
}
});

我不确定这是在不创建专用类的情况下添加类型转换器的正确方法,但这是我经过研究后发现的

最佳答案

因此,在尝试了更多事情并实际了解引发的异常之后,我发现了我(可能)做错了什么。

经过更多的尝试和错误,我将上述代码注册到类型转换器注册表中,而类型转换器本身没有任何更改(不确定我更改了什么,也许这只是一些缓存问题..)

当转换器最终被camel注册并执行时,我得到了这个错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

似乎不可能使用匿名类(以 Spring Boot 作为运行器)添加 TypeConverter,因为 Spring 尝试在那里注入(inject)一些 String。
我能够通过将 TypeConverter 提取到实际(非匿名)类,然后只需将该类的实例添加到注册表来解决该问题。
也可以在测试中使用内部类来执行此操作,只要它是公共(public)的。
无论如何,让实际的对抗方法是静态的很重要,否则 Spring 会抛出相同的错误。

不知道为什么会发生这一切,但至少我最终让它工作了。
也许有人可以阐明 Spring 的行为,它想要在没有任何东西的地方注入(inject)一个字符串,应该 Autowiring 。

问候
克里斯

关于java - Camel : Add TypeConverter in Test Case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58997462/

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