在单元测试中初始化配置

时间:2019-01-30 20:47:38

标签: java unit-testing jersey initialization singleton

我在单元测试中遇到了一些麻烦。我被这个问题困扰了一段时间。

我有一个EventProcessor类,它是一个单例类。在构造函数中,我调用了一个将读取配置文件的方法。

public class EventProcessor{

 // SingletonHolder is a container class to hold singleton instance 
private static final SingletonHolder<EventProcessor> m_EventProcessor = new SingletonHodler<>(new EventProcessor());

private EventProcessor() {
 Client client = ClientBuilder.newClient();
 String scheme = requiredHttps() ? "https" : "http";
 m_webTarget = client.target(scheme + ....);
}

// this method will get the singleton instance of this class
public static EventProcessor getAuditEventProcessor() {
    return m_EventProcessor.instance();
}

protected boolean requiredHttps() {
   // Configuration class is also a singleton and getConfig() is a static method
   //getSettings() will get key-value pair in the config file
  Map map = Configuration.getConfig().getSettings();  
  //do some check with the value in the map
 }
}

因此,当我启动整个项目时,另一个类将初始化Configuration类,并且可以使用requiredHttps()读取配置文件。一切正常。但是问题是当我编写单元测试时,无法初始化Configuration类。所以当我做类似的事情 测试类中的EventProcessor.getAuditEventProcessor()并获取ExceptionInInitializerError,由于从Configuration.getConfig()。getSettings()获得NullPointerException而无法初始化EventProcessor类。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以创建static方法来初始化Configuration并用@BeforeClass注释该方法。这样的方法将在测试类中的所有方法之前执行。