2017-10-20 30 views
1

我正在尝试为我创建的弹簧服务应用程序编写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。它不像春季启动启动时那样自动装配。我是新来的工作春天,所以我不知道最好的方式进行。我认为这没有自动装配,因为我没有像通常那样启动应用程序,而是直接实例化类。

我唯一可能的想法是为了测试的唯一目的而创建一个dao的getter/setter;但是我必须为每个使用的自动布线域和Idk做到这一点,如果它会有任何不需要的结果。

回答

2

您将被测组件自动装入测试。

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

private WebService service; 

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

应该只是

@Autowired 
private WebService service; 
+0

啊,新手的错误。感谢您花时间回答! – Aweava

相关问题