使用自动装配的组件为Spring Boot Service应用程序编写JUnit测试用例

时间:2017-10-20 15:04:02

标签: java spring unit-testing junit

我正在尝试为我创建的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的新手,所以我不确定最好的方法。我假设这没有得到自动装配,因为我没有像通常那样启动应用程序,而是直接实例化该类。

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

1 个答案:

答案 0 :(得分:2)

您将要测试的组件自动装入测试中。

您正在Spring容器外部创建组件,因此它不了解该组件。

  private WebService service;

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

应该只是

@Autowired
private WebService service;