为什么 Pitest 抛出 NoSuchMethodError?

Why is Pitest throwing a NoSuchMethodError?

所以我最近将我的一个存储库升级到 Java 11 并更新了一些其他依赖项的版本。在检查了几个依赖项并解决了所有错误之后,我终于让应用程序通过了所有单元测试和集成测试,并且它再次正常 运行ning。但是,当我推送项目时,它也会自动通过Pitest进行变异测试。

这是在一个完全干净的环境中完成的:docker 容器使用必要的 Java 和 Maven 版本(Java 11 和 Maven 3.6.3)启动。

突变测试现在无法编译,并给出以下堆栈跟踪:

18-Aug-2021 15:57:19    [WARNING] Error injecting: org.pitest.maven.PitMojo
18-Aug-2021 15:57:19    com.google.inject.ProvisionException: Unable to provision, see the following errors:
18-Aug-2021 15:57:19    
18-Aug-2021 15:57:19    1) Error injecting constructor, java.lang.NoSuchMethodError: 'void org.pitest.functional.FCollection.mapTo(java.lang.Iterable, java.util.function.Function, java.util.Collection)'
18-Aug-2021 15:57:19      at org.pitest.maven.PitMojo.<init>(Unknown Source)
18-Aug-2021 15:57:19      while locating org.pitest.maven.PitMojo
18-Aug-2021 15:57:19    
18-Aug-2021 15:57:19    1 error
18-Aug-2021 15:57:19        at com.google.inject.internal.InternalProvisionException.toProvisionException (InternalProvisionException.java:226)
18-Aug-2021 15:57:19        at com.google.inject.internal.InjectorImpl.get (InjectorImpl.java:1053)
18-Aug-2021 15:57:19        at com.google.inject.internal.InjectorImpl.getInstance (InjectorImpl.java:1086)
18-Aug-2021 15:57:19        at org.eclipse.sisu.space.AbstractDeferredClass.get (AbstractDeferredClass.java:48)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:85)
18-Aug-2021 15:57:19        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision (InternalFactoryToInitializableAdapter.java:57)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProviderInternalFactory.call (ProviderInternalFactory.java:66)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:112)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:127)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:61)
18-Aug-2021 15:57:19        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:47)
18-Aug-2021 15:57:19        at com.google.inject.internal.InjectorImpl.get (InjectorImpl.java:1050)
18-Aug-2021 15:57:19        at org.eclipse.sisu.inject.Guice4.get (Guice4.java:162)
18-Aug-2021 15:57:19        at org.eclipse.sisu.inject.LazyBeanEntry.getValue (LazyBeanEntry.java:81)
18-Aug-2021 15:57:19        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue (LazyPlexusBean.java:51)
18-Aug-2021 15:57:19        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:263)
18-Aug-2021 15:57:19        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:255)
18-Aug-2021 15:57:19        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo (DefaultMavenPluginManager.java:520)
18-Aug-2021 15:57:19        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:124)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
18-Aug-2021 15:57:19        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
18-Aug-2021 15:57:19        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
18-Aug-2021 15:57:19        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
18-Aug-2021 15:57:19        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
18-Aug-2021 15:57:19        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
18-Aug-2021 15:57:19        at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
18-Aug-2021 15:57:19        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
18-Aug-2021 15:57:19        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
18-Aug-2021 15:57:19        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
18-Aug-2021 15:57:19        at java.lang.reflect.Method.invoke (Method.java:566)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
18-Aug-2021 15:57:19    Caused by: java.lang.NoSuchMethodError: 'void org.pitest.functional.FCollection.mapTo(java.lang.Iterable, java.util.function.Function, java.util.Collection)'
18-Aug-2021 15:57:19        at org.pitest.maven.DependencyFilter.<init> (DependencyFilter.java:42)
18-Aug-2021 15:57:19        at org.pitest.maven.AbstractPitMojo.<init> (AbstractPitMojo.java:365)
18-Aug-2021 15:57:19        at org.pitest.maven.PitMojo.<init> (PitMojo.java:14)
18-Aug-2021 15:57:19        at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
18-Aug-2021 15:57:19        at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
18-Aug-2021 15:57:19        at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
18-Aug-2021 15:57:19        at java.lang.reflect.Constructor.newInstance (Constructor.java:490)
18-Aug-2021 15:57:19        at com.google.inject.internal.DefaultConstructionProxyFactory$ReflectiveProxy.newInstance (DefaultConstructionProxyFactory.java:126)
18-Aug-2021 15:57:19        at com.google.inject.internal.ConstructorInjector.provision (ConstructorInjector.java:114)
18-Aug-2021 15:57:19        at com.google.inject.internal.ConstructorInjector.access[=10=]0 (ConstructorInjector.java:32)
18-Aug-2021 15:57:19        at com.google.inject.internal.ConstructorInjector.call (ConstructorInjector.java:98)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:112)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:127)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
18-Aug-2021 15:57:19        at com.google.inject.internal.ConstructorInjector.construct (ConstructorInjector.java:93)
18-Aug-2021 15:57:19        at com.google.inject.internal.ConstructorBindingImpl$Factory.get (ConstructorBindingImpl.java:306)
18-Aug-2021 15:57:19        at com.google.inject.internal.InjectorImpl.get (InjectorImpl.java:1050)
18-Aug-2021 15:57:19        at com.google.inject.internal.InjectorImpl.getInstance (InjectorImpl.java:1086)
18-Aug-2021 15:57:19        at org.eclipse.sisu.space.AbstractDeferredClass.get (AbstractDeferredClass.java:48)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:85)
18-Aug-2021 15:57:19        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision (InternalFactoryToInitializableAdapter.java:57)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProviderInternalFactory.call (ProviderInternalFactory.java:66)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:112)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:127)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
18-Aug-2021 15:57:19        at com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:61)
18-Aug-2021 15:57:19        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:47)
18-Aug-2021 15:57:19        at com.google.inject.internal.InjectorImpl.get (InjectorImpl.java:1050)
18-Aug-2021 15:57:19        at org.eclipse.sisu.inject.Guice4.get (Guice4.java:162)
18-Aug-2021 15:57:19        at org.eclipse.sisu.inject.LazyBeanEntry.getValue (LazyBeanEntry.java:81)
18-Aug-2021 15:57:19        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue (LazyPlexusBean.java:51)
18-Aug-2021 15:57:19        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:263)
18-Aug-2021 15:57:19        at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:255)
18-Aug-2021 15:57:19        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo (DefaultMavenPluginManager.java:520)
18-Aug-2021 15:57:19        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:124)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
18-Aug-2021 15:57:19        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
18-Aug-2021 15:57:19        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
18-Aug-2021 15:57:19        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
18-Aug-2021 15:57:19        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
18-Aug-2021 15:57:19        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
18-Aug-2021 15:57:19        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
18-Aug-2021 15:57:19        at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
18-Aug-2021 15:57:19        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
18-Aug-2021 15:57:19        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
18-Aug-2021 15:57:19        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
18-Aug-2021 15:57:19        at java.lang.reflect.Method.invoke (Method.java:566)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
18-Aug-2021 15:57:19        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

这只是堆栈跟踪的一部分,但我相信这是相关部分,如果 necessary/requested 我可以获取更多堆栈跟踪。

我找不到关于此问题的很多信息。我在 Whosebug/GitHub 上发现的任何类似 topics/posts 只是建议执行 mvn clean 或升级到更新的版本(我注意到提到的最常见的是 Pitest 1.4.3)。然而,正如我所说的,变异测试(实际上是所有测试)是 运行 在一个全新和干净的环境中,我们将 Pitest 从 1.1.11 升级到 1.5.2。

事实上,我原本打算在 1.1.11 版本时离开 Pitest,但得到了一个 IllegalArgumentException,并认为这只是因为它需要升级。

为什么抛出这个异常? Pitest 是否缺少我需要添加的依赖项?我在哪里可以找到有关此类错误的更多信息,我可以进行哪些调试以找到原因并形成解决方案?

谢谢

事实证明,我们的远程环境 运行 测试方式略有不同,并且使用的 pitest 插件未在我们的 POM 中明确定义。该插件是 Alex Victoor's pitest-cucumber-plugin,其中包含一个兼容性矩阵,我可以使用它来解决问题。