我和我的团队在春季将Webapp作为一个项目进行了开发,我们必须测试大多数代码。问题在于,我们在很多方法中都使用了FaceContext
消息,并且总是在尝试测试这些方法时,在FaceContext-Messages上得到NullPointerException
。
我如何避免或抓住它们?
我们当前的解决方案是使用@Test(expect = NullPointerException.class)
,但这并不是我们想要的方式。在Junit中这可能吗,或者我需要硒吗?
一个例子是:
public boolean validateInfo(){
boolean correct = true;
if(startDate == null || endDate == null) {
if(startDate == null)
FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Gib ein Startdatum an!", ""));
if(endDate == null) FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Gib ein Enddatum an!", ""));
return false;
}
if(startDate.after(endDate)) {
FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Startdatum muss vor dem Enddatum sein!", ""));
correct = false;
}
if(maxChildren < 1) {
FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Max. Kinderanzahl muss größer 0 sein!", ""));
correct = false;
}
if(bringTime.after(pickupTime)) {
FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Bringzeit muss vor dem Abholzeit sein!", ""));
correct = false;
}
return correct;
}
它转到第一个FaceContext消息并引发
NullPointerException
。有人可以帮忙吗? StackOverflow上的其他解决方案没有帮助。 最佳答案
很简单:您的生产代码正在调用一个可能返回null的静态方法。
您可以使用PowerMock或JMockit之类的框架来模拟该静态调用。
当然,更好的方法是避免该静态调用,而是依赖于依赖项注入。由于嘲笑静态内容被认为是不良做法。因此,更好的方法是将生产代码更改为更易于测试,而不是使用此类框架来“解决”您的设计问题。
关于java - 如何在Junit测试中避免FaceContext中出现NullPointerException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44637149/