【发布时间】:2020-11-29 16:54:08
【问题描述】:
我有一个 Springboot 应用程序,它在运行时根据用户传递的输入参数从 ApplicationContext 查找 bean。对于这种方法,我正在尝试编写 Mockito 测试用例,但它不起作用并抛出 NullPointerException。
引导应用程序的类:
@SpringBootApplication
public class MyApplication {
private static ApplicationContext appContext;
public static void main(String[] args) {
appContext = SpringApplication.run(MyApplication.class, args);
}
public static ApplicationContext getApplicationContext() {
return appContext;
}
}
我要为其编写测试用例的类:
@Service
public class Mailbox {
@Autowired
MailProcessor processor;
public void processUserInput(Envelope object) {
processor.setCommand(MyApplication.getApplicationContext().getBean(object.getAction(), Command.class));
processor.allocateEnvelopes(object);
}
}
我的测试用例如下:
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class MailboxTest {
@Mock
MailProcessor processor;
@InjectMocks
Mailbox mailbox;
@Test
public void testProcessUserInput() {
Envelope message = new Envelope();
message.setAction("userAction");
message.setValue("userInput");
doNothing().when(processor).setCommand(any());
doNothing().when(processor).allocateEnvelopes(any());
mailbox.processUserInput(message);
Mockito.verify(processor).allocateEnvelopes(any());
}
}
每当我运行测试用例时,它都会在 processor.setCommand(MyApplication.getApplicationContext().getBean(object.getAction(), Command.class)); 的 Mailbox 类中给出 NullPointerException。如何模拟 ApplicationContext 查找?我错过了任何模拟步骤吗?
【问题讨论】:
-
这是关于如何在 springboot 中测试的很好的指导 stackoverflow.com/questions/51789880/…
标签: java spring-boot mockito springmockito