测试类使用@Autowired注入的bean为null

SpringBoot项目编写测试用例,在测试类中使用@Autowired注解拿到bean的值为null。

public class OrderBookServiceTest {

    @Autowired
    private OrderBookService orderBookService;   //null

    @Test
    @Transactional
    public void testHandleJson(){
        String msg="{\"asks\":[[0.51,14220.0],[0.52,20000.0]],\"bids\":[[0.4981,174.2],[0.498,15387.036],[0.497,20000.0],[0.4967,12.0],[0.3,2000.0]],\"e\":\"AABUSDT@delta_book.50\",\"t\":1600077555484}";
        JSONObject jsonObject = JSON.parseObject(msg);
        orderBookService.handleJsonObject(jsonObject);

        OrderBookView orderBookView = orderBookService.getOrderBookView("AABUSDT");
        assertThat(orderBookView).isNotNull();
        List<BookEntry> askSnapShot = orderBookView.getAskSnapShot();
        assertThat(askSnapShot.size()).isEqualTo(2);

        assertThat(orderBookView.getBidsSnapShot().size()).isEqualTo(5);
    }
}

网上查阅找发现说是要加上以下注解即可
@SpringBootTest
@RunWith(SpringRunner.class)

@SpringBootTest
@RunWith(SpringRunner.class)
public class OrderBookServiceTest {

    @Autowired
    private OrderBookService orderBookService;   //null

    @Test
    @Transactional
    public void testHandleJson(){
        String msg="{\"asks\":[[0.51,14220.0],[0.52,20000.0]],\"bids\":[[0.4981,174.2],[0.498,15387.036],[0.497,20000.0],[0.4967,12.0],[0.3,2000.0]],\"e\":\"AABUSDT@delta_book.50\",\"t\":1600077555484}";
        JSONObject jsonObject = JSON.parseObject(msg);
        orderBookService.handleJsonObject(jsonObject);

        OrderBookView orderBookView = orderBookService.getOrderBookView("AABUSDT");
        assertThat(orderBookView).isNotNull();
        List<BookEntry> askSnapShot = orderBookView.getAskSnapShot();
        assertThat(askSnapShot.size()).isEqualTo(2);

        assertThat(orderBookView.getBidsSnapShot().size()).isEqualTo(5);
    }
}

加上后发现还是报错。需要将注入的类加载@SpringBootTest注解的class属性上

@SpringBootTest(classes = {OrderBookServiceImpl.class, AlgoServiceImpl.class})
@RunWith(SpringRunner.class)
public class OrderBookServiceTest {

    @Autowired
    private OrderBookService orderBookService;

    @Autowired
    private AlgoService algoService;

    @Test
    @Transactional
    public void testHandleJson(){
        String msg="{\"asks\":[[0.51,14220.0],[0.52,20000.0]],\"bids\":[[0.4981,174.2],[0.498,15387.036],[0.497,20000.0],[0.4967,12.0],[0.3,2000.0]],\"e\":\"AABUSDT@delta_book.50\",\"t\":1600077555484}";
        JSONObject jsonObject = JSON.parseObject(msg);
        orderBookService.handleJsonObject(jsonObject);

        OrderBookView orderBookView = orderBookService.getOrderBookView("AABUSDT");
        assertThat(orderBookView).isNotNull();
        List<BookEntry> askSnapShot = orderBookView.getAskSnapShot();
        assertThat(askSnapShot.size()).isEqualTo(2);

        assertThat(orderBookView.getBidsSnapShot().size()).isEqualTo(5);
    }

为什么是这样的呢。我的项目里面包含多个子工程,子工程里面没有Application.java启动类。

@SpringBootTest次注解的作用就是启动Spring 容器。没有这个注解的测试类在运行的时候并没有启动Spring容器,容器没有启动,那又怎么能通过@Autowired注解来注入呢

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值