自定义Nifi处理器上的Maven构建在测试中失败,java.lang.UnsupportedOperationException

自定义Nifi处理器上的Maven构建在测试中失败,java.lang.UnsupportedOperationException,java,eclipse,maven,unit-testing,apache-nifi,Java,Eclipse,Maven,Unit Testing,Apache Nifi,我们已经为Nifi使用了一套定制的处理器,当使用命令mvn clean install时,它们编译得很好。但是,我们目前正在尝试重构代码,以便将静态函数的集合以及其他重复代码都移动到处理器继承的单个基类中 这个基类(我们称之为BaseProcessor)继承了AbstractProcessor类并实现了它的大部分。然后,我们的其他处理器继承这个BaseProcessor并向其中添加它们自己的代码,然后根据需要调用基类函数(例如,获取JWT令牌并发出GET/PUT/POST请求) 重构完成后,Ec

我们已经为Nifi使用了一套定制的处理器,当使用命令
mvn clean install
时,它们编译得很好。但是,我们目前正在尝试重构代码,以便将静态函数的集合以及其他重复代码都移动到处理器继承的单个基类中

这个基类(我们称之为BaseProcessor)继承了AbstractProcessor类并实现了它的大部分。然后,我们的其他处理器继承这个BaseProcessor并向其中添加它们自己的代码,然后根据需要调用基类函数(例如,获取JWT令牌并发出GET/PUT/POST请求)

重构完成后,Eclipse和Maven都报告Processor代码中没有问题。然而,当我们运行
mvn clean install
时,我们收到两个失败的测试。这些测试从未实际使用过,只是空类。以下是此类“测试”的样本。我们有两个,它们都是相同的,只是它们的名称和所指的类不同

package com.company.processors.project;

import org.apache.nifi.util.TestRunner;
import org.apache.nifi.util.TestRunners;
import org.junit.Before;
import org.junit.Test;


public class OurRefractoredClassTest
{

  private TestRunner testRunner;

  @Before
  public void init( )
  {
    testRunner = TestRunners.newTestRunner( OurRefractoredClass.class );
  }

  @Test
  public void testProcessor( )
  {

  }

}
然而,当我们运行maven构建处理器时,我们得到以下消息:

[ERROR] Errors:
[ERROR]   FetchJobFromServerTest.init:17 » Runtime java.lang.UnsupportedOperationException
[ERROR]   PushUpdateToServerTest.init:14 » Runtime java.lang.UnsupportedOperationException
[INFO]
[ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for econia 1.3:
[INFO]
[INFO] company............................................. SUCCESS [  3.781 s]
[INFO] nifi-esp-processors ................................ FAILURE [ 10.024 s]
[INFO] nifi-esp-nar ....................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  17.711 s
[INFO] Finished at: 2019-12-19T11:25:56+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project nifi-esp-processors: There are test failures.
上面的两个错误都涉及到测试运行程序的创建。注释掉这一部分也会导致错误。到目前为止,我们能够找到的唯一修复方法是简单地删除这两个文件。然而,这并不理想,因为我们希望稍后实现单元测试

有人知道为什么会这样吗?这是否与折射继承新基本处理器的处理器有关


最后,我们没有在org中列出我们的基本处理器,apache.nifi.processors.processor文件,因为我们不想让Nifi工作流设计者看到它。

可能是因为没有在META-INF/resources/org.apache.Nifi.processors.processor文件中列出处理器会导致TestRunner无法通过反射/ServiceLoader加载该类,所以您可以尝试添加该类以查看它是否有效(这并不适合您的用例)。或者,您可以尝试手动实例化处理器,并使用另一个重载版本的
testrunner.newestrunner()
,该版本采用处理器实现,而不仅仅是其类名