@Configuration
public class SpringEventsListeners {
private static CPLocation cpLocation = CPLoggingFactory.createCPLocation(SpringEventsListeners.class);
private ConfigurationServiceImpl configService;
//Constructor Injection for Testability.
public SpringEventsListeners(final ConfigurationServiceImpl configService) {
this.configService = configService;
}
/**
* Rabbit listeners might be started/stopped after a refresh depending on a property.
* In case a change is needed, we perform it.
*/
@EventListener(classes= { ApplicationReadyEvent.class, EnvironmentChangeEvent.class })
public void handleRabbitListenerToggle() {
String method = "handleRabbitListenerToggle";
cpLocation.info(method, "Received refresh event. Determining action.");
boolean shouldActivateRabbit = configService.shouldActivateRabbitListeners();
for (SimpleMessageListenerContainer container : configService.getAllRabbitSimpleMessageListenerContainers()) {
if (shouldActivateRabbit && !container.isActive()) {
container.start();
cpLocation.info(method, "Starting container: "+Arrays.toString(container.getQueueNames()));
}
else if (!shouldActivateRabbit && container.isActive()) {
container.shutdown();
cpLocation.info(method, "Shutting down container: "+Arrays.toString(container.getQueueNames()));
}
}
}
}
@RunWith(MockitoJUnitRunner.class)
public class SpringEventsListenersTests {
@InjectMocks
private SpringEventsListeners classUnderTest;
@Mock
private ConfigurationServiceImpl mockConfigurationService;
@Mock
private SimpleMessageListenerContainer mockSimpleMessageListenerContainer;
@Test
public void testToggleTrue() {
//Given
given(mockConfigurationService.shouldActivateRabbitListeners()).willReturn(true);
given(mockConfigurationService.getAllRabbitSimpleMessageListenerContainers()).willReturn(Arrays.asList(mockSimpleMessageListenerContainer));
given(mockSimpleMessageListenerContainer.isActive()).willReturn(false);
//When
classUnderTest.handleRabbitListenerToggle();
Assert.assertThat(true, is(true));
}
}
我还需要断言。shutdown或。start是在容器上调用的,因此需要对其进行模拟。
Mockito不能模拟final
方法(isactive()
是final)。
您可以使用反射(例如DirectFieldAccessor
)来检查Active
字段。
也就是说,嘲笑监听器容器是相当不寻常的;它是一段复杂的代码;也许你能准确地解释一下你想测试的是什么?
当Iam在Mockito中使用anyString()或anyInt()或anyLong()方法时,stubbing不起作用。如果我使用anyObject(),它工作得很好。例如,如果我们有使用此签名的方法: 嘲笑: 当在测试的方法内部调用此模拟时,它将抛出NullPointerException。但是如果我们为anyObject()更改它,一切都很好。有人知道为什么anyString()会导致Nu
问题内容: 这是我要做的: 为下面的main()调用的方法定义存根。每个存根应打印“ FIXME:完成methodName()”,后跟换行符,并应返回-1。 输出示例: 这是我的代码: 我以为我理解方法存根,但是我感觉自己犯了一个非常愚蠢而简单的错误?我只能编辑代码的公共static int methodName部分。 问题答案: 从这个意义上讲,方法存根是没有实质内容的方法,即它没有按照计划执行
我正在尝试使用sinon存根替换一个可能需要很长时间的函数。但是当我运行测试时,测试代码似乎没有使用sinon存根。 这是我要测试的代码。 这是测试代码。 我得到一个断言错误 我做错了什么?为什么不使用存根?摩卡的测试框架。
我有一个使用node-slack-sdk的Express应用程序,当某些endpoint被击中时,它会使帖子松弛。我正在尝试为一个路由编写集成测试,其中包括调用该库中的方法。 我想从Slack库中阻止某些方法的所有默认行为,并简单地断言这些方法是用某些参数调用的。 我试图把问题简单化。如何建立实例的方法(实际上嵌套在中)的存根,阻止原始功能,并断言它是用什么参数调用的? 我尝试了很多没有成功的东西
当对进行stubbing时,我会得到以下关于用返回值对void方法进行stubbing的错误消息,尽管不是void。该错误似乎与有关,尽管我正在插入。 我的测试: 为什么会发生这种情况,我如何修复它?
我试图通过在传入字符串“John”时返回一个用户对象来建立类(spring-data-jpa存储库)的方法。 发生的情况是,在userService中,当调用users.findbyUsername(“John”)时,它总是返回null,而不是我定义的任何用户对象: 当我在测试方法中放置断点并比较users和UserService.users时,它们是相等的。 pom版本