我试图使@spybean或@mockbean在这个测试中工作,就像它们在我的所有其他测试中一样。这里唯一的区别是这个测试使用了一个活动的概要文件,因为它模拟了一些AWS库
@Component
public class SqsAdapter {
@Autowired
QueueMessagingTemplate queueMessagingTemplate;
@Autowired
MyProcessor processor;
@SqsListener("${queue.name}")
public void onEvent(String message) {
if (!StringUtils.isEmpty(message)) {
processor.process(message);
} else {
log.error("Empty or null message received from queue");
}
}
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@ActiveProfiles("local")
public class SqsAdapterTest {
@Autowired
AmazonSQSAsync amazonSQS;
@SpyBean
MyProcessor processor;
@InjectMocks
SqsAdapter adapter;
@Test
public void testOnEvent() {
doNothing().when(processor).process(any()); // <---- process() is void
String event = "royale with cheese";
adapter.onEvent(event);
verify(processor, times(1)).process(event);
}
}
当我在单元测试中调试时,我在processor
上得到一个java.lang.NullPointerException
,就好像它从未被初始化一样:
我也尝试将其切换到@mockbean,结果相同
此外,我还尝试取消对@springboottest和@activeprofiles的测试...并删除了AmazonSQSAsync依赖项,因为我不是在嘲笑监听器本身,它仍然抛出相同的NPE
我错过了什么?
我想我已经得到了答案:似乎是因为通过将@injectMocks注释与@spybean混合使用测试框架...因为我试图不使用Mockito mocks,而这是一个Mockito注释,我认为这是在搞砸测试
工作单元测试如下所示:
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("local")
public class SqsAdapterTest {
@Autowired
AmazonSQSAsync amazonSQS;
@SpyBean
SeamEventProcessor seamEventProcessor;
@Autowired
SqsAdapter adapter;
@Test
public void testOnEvent() {
doNothing().when(seamEventProcessor).process(any());
String event = "royale with cheese";
adapter.onEvent(event);
verify(seamEventProcessor, times(1)).process(event);
}
}
我试图模拟一个方法链(嵌套)以返回所需的值,这是代码: 我试过这个模拟,但它不起作用: 任何解决方案如何解决这样的问题? 非常感谢。
我的实现出了什么问题?谢谢
我正在进行一个spring-boot项目,其中我有一个控制器,它调用服务方法并处理输出。 我正在使用spring MockMvc测试web层。在我的测试类中,我用Mockito.when()模拟了服务方法。但是当我调用相应的处理方法时,它不是调用被模仿的服务方法,而是返回一个空响应。 控制器 测试类 返回的响应是 请帮我解决这个问题。提前谢谢!
我正在为以下类编写单元测试 要测试的类: 注意:我正在使用TestNG和mockito。我可以扩展并使用,声明我的bean和自动应用上下文。我觉得这对我的用例来说是矫枉过正。我只需要模拟ApplicationContext的getBean方法。
问题内容: 如何用void返回类型模拟方法? 我实现了一个观察者模式,但是我无法用Mockito对其进行模拟,因为我不知道如何做。 我试图在互联网上找到一个例子,但没有成功。 我的课看起来像这样: 系统不会通过模拟触发。 我想显示上述系统状态。并根据他们做出断言。 问题答案: 看看Mockito API文档。由于链接的文档提到(点#12),你可以使用任何的家人从框架的的方法来嘲笑无效的方法。 例如
我在单元测试中使用了Moq框架。这是UpdateApplication测试方法: 我在运行测试时遇到一个异常: 我应该如何编写使用Moq更新和删除操作的单元测试?