【问题标题】:Writing JUnit test cases for a Spring Boot Service Application with autowired components使用自动装配组件为 Spring Boot 服务应用程序编写 JUnit 测试用例
【发布时间】:2018-04-01 19:05:26
【问题描述】:

我正在尝试为我创建的 Spring 服务应用程序编写 JUnit 测试用例。我已经完成了应用程序的冒烟测试,并希望继续编写一系列单元测试。

我开始测试服务层。我的 @AutoWired 组件(包括我的 DAO 对象)遇到问题。运行 Spring 应用程序本身时,一切正常。但是,在运行我的 JUnit 测试时,它们不会自动装配并保持为空,从而导致 NPE。这是我正在使用的框架:

服务文件:

@Component
public class WebServiceImpl implements WebService{

@Autowired
WebDAO webDAO;

@Override
public List<String> getItems(){
    List<String> items = webDAO.getItems();
    /*
     * some filtering/actions done here
    */ 
    return items;
    }
}   

测试文件:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTests{
    private WebService service;

    @Before
    public void setup(){
        this.service = new WebServiceImpl();
    }

    @Test
    public void getItemsTest(){
        List<String> items = this.service.getItems();
        assertNotNull(items);
    }
}

运行此测试时,我从 webDAO 获得了 NPE。它不会像通常在 spring boot 启动中那样自动连接。我是 Spring 的新手,所以我不确定最好的方法。我认为这没有自动装配,因为我没有像通常那样启动应用程序,而是直接实例化类。

我唯一可能的想法是在这里为 dao 创建一个 getter/setter,仅用于测试;但是,如果它会产生任何不需要的结果,我将不得不对使用的每个自动装配字段和 Idk 执行此操作。

【问题讨论】:

    标签: java spring unit-testing junit


    【解决方案1】:

    您将被测组件自动连接到测试中。

    您在 Spring 容器之外创建组件,因此它不知道该组件。

      private WebService service;
    
        @Before
        public void setup(){
            this.service = new WebServiceImpl();
        }
    

    应该是

    @Autowired
    private WebService service;
    

    【讨论】:

    • 啊,菜鸟的错误。感谢您抽出宝贵时间回答!
    猜你喜欢
    • 2021-05-17
    • 2017-02-25
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2021-07-26
    • 2015-03-03
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多