我正在尝试为我创建的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执行此操作,如果它有任何不需要的结果。
答案 0 :(得分:2)
您将要测试的组件自动装入测试中。
您正在Spring容器外部创建组件,因此它不了解该组件。
private WebService service;
@Before
public void setup(){
this.service = new WebServiceImpl();
}
应该只是
@Autowired
private WebService service;