sparsick commented on PR #2055:
URL: https://github.com/apache/maven/pull/2055#issuecomment-2610257448
I'd like to share a few thoughts that I have during writing the tests (if
the mailing list is a better place, I can also share them there):
- During testing I miss a possibility where I can inject mocks to the mojo.
- Is it possible to introduce constructor injection? It would be easier to
write mojo test with plain JUnit5. I know that I can add a constructor with
parameters, but then I also have to a default constructor because of the DI
framework. It feels noisy.
This construction
```java
@Inject
public HelloMojo(MavenDIComponent component) {
this.component = component;
}
```
results in runtime error:
```shell
org.junit.jupiter.api.extension.ParameterResolutionException: Unable to
resolve mojo
at
org.apache.maven.api.plugin.testing.MojoExtension.resolveParameter(MojoExtension.java:201)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.apache.maven.di.impl.DIException: Error while initializing
binding
BindingToConstructor[@Named("org.apache.maven.plugins:mavendi-maven-plugin:0.0.1-SNAPSHOT:hello")
HelloMojoFactory][]
at
org.apache.maven.di.impl.Binding$1.lambda$compile$0(Binding.java:109)
at
org.apache.maven.di.impl.InjectorImpl.getInstance(InjectorImpl.java:75)
at
org.apache.maven.api.di.testing.MavenDIExtension.lookup(MavenDIExtension.java:99)
at
org.apache.maven.api.plugin.testing.MojoExtension.resolveParameter(MojoExtension.java:181)
... 2 more
Caused by: org.apache.maven.di.impl.DIException: Failed to call constructor
public org.apache.maven.plugins.HelloMojoFactory() to provide requested key
@Named("org.apache.maven.plugins:mavendi-maven-plugin:0.0.1-SNAPSHOT:hello")
HelloMojoFactory
at
org.apache.maven.di.impl.ReflectionUtils.lambda$bindingFromConstructor$7(ReflectionUtils.java:373)
at
org.apache.maven.di.impl.Binding$BindingToConstructor.lambda$compile$0(Binding.java:188)
at
org.apache.maven.di.impl.Binding$1.lambda$compile$0(Binding.java:105)
... 5 more
Caused by: java.lang.NoSuchMethodError: org.apache.maven.plugins.HelloMojo:
method 'void <init>()' not found
at
org.apache.maven.plugins.HelloMojoFactory.<init>(HelloMojoFactory.java)
at
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at
org.apache.maven.di.impl.ReflectionUtils.lambda$bindingFromConstructor$7(ReflectionUtils.java:360)
... 7 more
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]