java - 如何在 Junit 测试中避免 FaceContext 出现 NullPointerException?

标签 java spring junit nullpointerexception message

我和我的团队在 Spring 中创建了一个 Web 应用程序作为一个项目,我们必须测试大部分代码。问题是我们在很多方法中使用 FaceContext 消息,并且当我们尝试测试这些方法时,我们总是在 FaceContext-Messages 处得到 NullPointerException 。 我怎样才能避免或捕获它们?

我们当前的解决方案是使用@Test(expect = NullPointerException.class),但这并不是我们真正想要的方式。这在 Junit 中可能吗?还是我需要 Selenium 来实现?

一个例子是:

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 等框架来模拟该静态调用。

当然,更好的方法是避免静态调用并依赖依赖注入(inject)。因为 mock 静态的东西被认为是一种不好的做法。因此,更好的方法是更改​​您的生产代码以使其更易于测试,而不是求助于此类框架来“修复”您的设计问题。

关于java - 如何在 Junit 测试中避免 FaceContext 出现 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44637149/

相关文章:

java - byte.parse() 不喜欢 8 位

java - 使用 JSF 2.2 Glassfish 4.1 的表单例份验证方法失败

java - 使用 JPA CRUD 显式级联删除父级而不使用注释

java - 从 Junit 迁移到 TestNG

java - 从二叉树中随机选择一个节点

java - SharedPreferences 可以通过但不保存

java - 属性(property)选址环境设置

openshift中的Java RMI端口绑定(bind)错误

java - 如何从字符串创建 Kafka 消费者记录以构建 Junit 测试用例

junit - 我们是否有任何经验法则来估算 JUnit 测试用例的工时