首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ApplicationContext.getBean(类)返回null的Junit测试用例

ApplicationContext.getBean(类)返回null的Junit测试用例
EN

Stack Overflow用户
提问于 2022-10-08 16:31:54
回答 2查看 198关注 0票数 0

当试图为applicationContext.getBean编写测试用例时(类名)。获取空指针异常。下面是Java类

代码语言:javascript
运行
复制
@Service
@Slf4j
public class MyClassName {

  @Autowired
  ServiceOne serviceOne;

  @Autowired
  ApplicationContext applicationContext;


  public getCitizenData(String mobileNumber) {

    CitizenDataService citizenDataService = applicationContext.getBean(CitizenDataService.class, mobileNumber);
    log.info("Getting Data");
    return citizenDataService.searchMethod(mobileNumber)
         // While debugging test file citizenDataService is coming as Null Hence getting Null Pointer exception
        .flatMap(.............
         )

测试文件

代码语言:javascript
运行
复制
class MyClassNameTest {

  private MyClassName mockMyClassName;

  @BeforeEach
  void setUp() {
    mockMyClassName = new MyClassName();
    mockMyClassName.serviceOne = mock(ServiceOne.class);
    mockMyClassName.applicationContext = mock(ApplicationContext.class);
    //mockMyClassName.applicationContext.getAutowireCapableBeanFactory();
  }

  @Test
  void testGetCitizenData() {
    // Setup
    // Configure ApplicationContext.getBean(...).
    final CitizenDataService citizenDataService = new CitizenDataService("mobileNumber");
    when(mockMyClassName.applicationContext.getBean(CitizenDataService.class, "args"))
        .thenReturn(citizenDataService);

    final result = mockMyClassName.getCitizenData("mobileNumber");
    // While debugging this citizenDataService is coming as Null Hence getting Null Pointer exception

如何编写测试用例?

EN

Stack Overflow用户

发布于 2022-10-11 11:44:48

我不建议模拟应用程序上下文。有太多的方法有相似的论点,很难嘲笑正确的方法。相反,可以使用专门为在测试中使用而编写的一个现成的实现,例如StaticApplicationContext

代码语言:javascript
运行
复制
class MyClassNameTest {
  private MyClassName mockMyClassName;
  private ApplicationContext appCtx;

  @BeforeEach
  void setUp() {
    mockMyClassName = new MyClassName();
    mockMyClassName.serviceOne = mock(ServiceOne.class);
    this.appCtx = new StaticApplicationContext();
  }

  @Test
  void testGetCitizenData() {
    appctx.registerBean(CitizenDataService.class, () -> new CitizenDataService("mobileNumber"));

    final result = mockMyClassName.getCitizenData("mobileNumber");
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73998715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档