我想在我的Junit5单元测试中将值注入到带有@Value注释的私有字段。
@Value("$(invoice.maxRetry)")
private maxRetry;
我引用了这个,并使用了ReflectionTestUtils。setField通过注入值解决了我的问题,但在验证方法被调用的次数时失败。
MyClass(我的类别):
public class MessageProcessor {
@Value("$(invoice.maxRetry)")
private maxRetry;
protected void handleMessage() {
if(retry > maxRetry) {
kafkaTemplate.sendMessage(msg);
}
}
测试类:
@ExtendWith(MockitoExtension.class)
public class MessageProcessorTest {
@Mock
private kafkaTemplate kafkaTemplate;
@Mock
private MessageProcessor messageProcessor
@Test
test() {
ReflectionTestUtils.setField(messageProcessor, "maxRetry", "5");
doNothing().when(kafkaTemplate).sendMessage(any());
messageProcessor.handleMessage();
verify(kafkaTemplate).sendMessage(any());
}
}
运行上述测试时出错
org.mockito.exceptions.verification.TooManyActualInvocations:
kafkaTemplate.sendMessage(<any>);
Wanted 1 time:
But was 2
我想kafkaTemplate.sendMessage();被调用一次,但被调用两次后添加反射TestUtils。
需要关于如何修复此问题的建议。
通过稍微重构类并支持构造注入,可以避免使用ReflectionTestUtils:
public class MessageProcessor {
private String maxRetry;
private KafkaTemplate template;
// ... any further fields
public class MessageProcessor(@Value("$(invoice.maxRetry)") String maxRetry, KafkaTemplate kafkaTemplate) {
this.maxRetry = maxRetry;
this.kafkaTemplate = kafkaTemplate;
}
}
然后,在测试中,您可以通过手动创建被测试类的实例(MessageProcessor)来控制maxRetry的值。
@ExtendWith(MockitoExtension.class)
public MessageProcessorTest {
@Mock
private KafkaTemplate kafkaTemplate;
private MessageProcessor messageProcessor;
@BeforeEach
void setUp() {
this.messageProcessor = new MessageProcessor("42", kafkaTemplate);
}
}
... 然后只依赖JUnit和Mocktio,这将帮助您添加验证。
我想把硒和Spring一起使用。 如果我在没有Spring的情况下使用Selenium,一切正常。每当我添加Spring依赖项(没有Spring代码)时,执行时会引发以下异常: 线程“main”java中出现异常。lang.NoClassDefFoundError:org/openqa/selenium/MutableCapabilities at java。lang.ClassLoader。在j
我想在我的spring boot项目中使用Kafka Streams实时处理。所以我需要Kafka Streams配置,或者我想使用KStreams或KTable,但我在互联网上找不到示例。 我做了制作人和消费者现在我想流实时。
如spring boot博客所述 我尝试自定义我的对象序列化。 在我的配置中添加了一个新的配置bean之后 当我尝试输出类用户的实例时,json结果不在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES中 也许我需要在我的Jersey配置中注册一些东西来激活我的自定义obejctMapper配置 谢谢
我有一个Spring Boot2.25.1应用程序,它使用Camel 2.25.1与camel-kafka,一切都正常工作…在我的Kafka消费者中,我需要添加该功能以按需暂停消费,因此我升级到camel 3.18.1,以便我可以使用可暂停功能。升级到3.18.1后,我收到错误FileNotes与类文件TimeoutAwareAggregationStategy.class. 当我打开camel-
我使用Spring的引导2.6.3和我试图使用thymeleaf最近得到一个与html的确认消息后,我通过邮件确认我的帐户(我只是使用确认邮件来验证新帐户),所以我看了一些关于thymeleaf的视频,我标记所有的视频都有一个名为模板的文件夹和静态在src/main/ressource和我没有他们,所以我创建了一个名为模板的文件夹,在文件夹中我创建了一个html文件只是为了尝试它,如果它(html
我目前正在与apache ivy的conf设置作斗争。也许我会先解释我想实现的目标: 我需要两种配置:编译、运行时 这是我试过的: 但它甚至无法被解析:无法解析ivy文件'...\ivy.xml': 有人能告诉我如何正确地声明conf设置,这样我就可以使用compile或runtime来解析,并获得所有jar,包括可传递的依赖项(在这个示例中,只有ivy的jar)。 使现代化 好的,谢谢你的链接。