我有一个传递测试的类,如果我在Jenkins之外的一个单独的Java类中调用它,则会运行。它的构造函数有这个:
this.fs = FileSystems.getDefault();
稍后执行时,我在看到空指针异常后添加了一个健全性检查。
if (this.fs == null) {
throw new Exception("No FileSystem found");
}
因此,当此插件在Jenkins中运行时,默认FileSystem
为null
,并抛出该异常。我的原始代码使用Paths.get
,但我已将其切换为this.fs.getPath(stringPath);
,因此我可以使用DI为单元测试创建FileSystem
。
使用Paths.get
在重构之前工作正常,但我不确定如何使用该方法知道正确的FileSystem
,特别是考虑到默认值似乎没有设置这种环境。
答案 0 :(得分:0)
从未听说过这样的问题。听起来您的环境严重受损,因为这是由Java平台定义的。尝试平分 - 逐步删除插件中的非关键部分,直到找出触发问题的方式。
答案 1 :(得分:0)
使用System.out
后,我意识到构造函数不会在插件更新上运行。它在保存作业配置时运行。因此,当我保存作业配置时,这通过副作用解决了我的问题。我最初没有设置this.fs
,因此更新插件并没有运行这些新行。因此,我不应该将内容放入不会用于配置的构造函数中。事后看来,这是有道理的,因为它真的是@DataBoundConstructor
,这意味着它被用于来自配置的数据。