This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwebbeans-meecrowave.git


The following commit(s) were added to refs/heads/master by this push:
     new 8a596d2  [MEECROWAVE-276] fix meecrowave-junit for @MeecrowaveConfig 
case
8a596d2 is described below

commit 8a596d21f7d6786b9149b10b96ca76576da4d63e
Author: Romain Manni-Bucau <rmannibu...@gmail.com>
AuthorDate: Tue Jan 12 14:40:27 2021 +0100

    [MEECROWAVE-276] fix meecrowave-junit for @MeecrowaveConfig case
---
 .../src/main/jbake/content/testing/index.adoc      |   6 ++
 .../meecrowave/junit5/MeecrowaveExtension.java     | 111 +++++++++++----------
 .../junit5/MeecrowaveTestLifecycleTest.java        |   3 +
 pom.xml                                            |   2 +-
 4 files changed, 68 insertions(+), 54 deletions(-)

diff --git a/meecrowave-doc/src/main/jbake/content/testing/index.adoc 
b/meecrowave-doc/src/main/jbake/content/testing/index.adoc
index b112ae1..b229045 100644
--- a/meecrowave-doc/src/main/jbake/content/testing/index.adoc
+++ b/meecrowave-doc/src/main/jbake/content/testing/index.adoc
@@ -83,6 +83,7 @@ which is close to `MonoMeecrowave.Runner` in term of usage.
 [source,java]
 ----
 @MeecrowaveConfig /*(some config)*/
+@TestInstance(PER_CLASS)
 public class MeecrowaveConfigTest {
     @ConfigurationInject
     private Meecrowave.Builder config;
@@ -109,6 +110,11 @@ TIP: JUnit 5 integration provides an 
`@AfterFirstInjection` method and `@AfterLa
 which can be used to setup/reset some environment using injections once for a 
set of test methods.
 The methods must not have any parameter.
 
+IMPORTANT: when not using `@TestInstance(PER_CLASS)`, container is started per 
test method. Generally speaking you should  try to align the scope of your 
container to the scope of validity of your beans.
+For a library it is generally the class (so `@MeecrowaveConfig 
@TestInstance(PER_CLASS)`) and for an application the whole test set (so 
`@MonoMeecrowaveConfig`).
+Note that using an `Extension` you can adjust mocks or spy beans dynamically 
without a container restart.
+Having the longest life time for the container will make your test suite 
faster to execute.
+
 == Arquillian Container
 
 Container dependency:
diff --git 
a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
 
b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
index 18aaeea..2464188 100644
--- 
a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
+++ 
b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
@@ -18,17 +18,6 @@
  */
 package org.apache.meecrowave.junit5;
 
-import static java.util.Optional.ofNullable;
-import static org.junit.platform.commons.util.AnnotationUtils.findAnnotation;
-
-import java.io.File;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Optional;
-
-import javax.enterprise.context.spi.CreationalContext;
-
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.configuration.Configuration;
 import org.apache.meecrowave.testing.Injector;
@@ -38,32 +27,68 @@ import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
+import javax.enterprise.context.spi.CreationalContext;
+import java.io.File;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Optional;
+
+import static java.util.Optional.ofNullable;
+import static org.junit.platform.commons.util.AnnotationUtils.findAnnotation;
+
 public class MeecrowaveExtension extends BaseLifecycle
         implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, 
AfterEachCallback {
-    
-       private static final ExtensionContext.Namespace NAMESPACE = 
ExtensionContext.Namespace.create(MeecrowaveExtension.class.getName());
-       
+
+    private static final ExtensionContext.Namespace NAMESPACE = 
ExtensionContext.Namespace.create(MeecrowaveExtension.class.getName());
+
     private final ScopesExtension scopes = new ScopesExtension() {
         @Override
         protected Optional<Class<? extends Annotation>[]> getScopes(final 
ExtensionContext context) {
             return context.getElement()
-                          .map(e -> findAnnotation(context.getElement(), 
MeecrowaveConfig.class)
-                                  .orElseGet(() -> context.getParent()
-                                                          
.flatMap(ExtensionContext::getElement)
-                                                          .flatMap(it -> 
findAnnotation(it, MeecrowaveConfig.class))
-                                                          .orElse(null)))
-                          .map(MeecrowaveConfig::scopes)
-                          .filter(s -> s.length > 0);
+                    .map(e -> findConfig(context))
+                    .map(MeecrowaveConfig::scopes)
+                    .filter(s -> s.length > 0);
         }
     };
 
     @Override
     public void beforeAll(final ExtensionContext context) {
+        if (isPerClass(context)) {
+            doStart(context);
+        }
+    }
+
+    @Override
+    public void afterAll(final ExtensionContext context) {
+        final ExtensionContext.Store store = context.getStore(NAMESPACE);
+        ofNullable(store.get(LifecyleState.class, LifecyleState.class))
+                .ifPresent(s -> s.afterLastTest(context));
+        if (isPerClass(context)) {
+            store.get(Meecrowave.class, Meecrowave.class).close();
+        }
+    }
+
+    @Override
+    public void beforeEach(final ExtensionContext context) {
+        if (!isPerClass(context)) {
+            doStart(context);
+        }
+    }
+
+    @Override
+    public void afterEach(final ExtensionContext context) {
+        if (!isPerClass(context)) {
+            doRelease(context);
+            context.getStore(NAMESPACE).get(Meecrowave.class, 
Meecrowave.class).close();
+        }
+    }
+
+    private void doStart(final ExtensionContext context) {
         final Meecrowave.Builder builder = new Meecrowave.Builder();
-        final Optional<MeecrowaveConfig> meecrowaveConfig = 
findAnnotation(context.getElement(), MeecrowaveConfig.class);
+        final MeecrowaveConfig config = findConfig(context);
         final String ctx;
-        if (meecrowaveConfig.isPresent()) {
-            final MeecrowaveConfig config = meecrowaveConfig.get();
+        if (config != null) {
             ctx = config.context();
 
             for (final Method method : MeecrowaveConfig.class.getMethods()) {
@@ -104,39 +129,19 @@ public class MeecrowaveExtension extends BaseLifecycle
         store.put(Meecrowave.Builder.class, builder);
         meecrowave.bake(ctx);
 
-        if (isPerClass(context)) {
-            doInject(context);
-            store.put(LifecyleState.class, onInjection(context, null));
-        }
-    }
-
-    @Override
-    public void afterAll(final ExtensionContext context) {
-        final ExtensionContext.Store store = context.getStore(NAMESPACE);
-        ofNullable(store.get(LifecyleState.class, LifecyleState.class))
-                .ifPresent(s -> s.afterLastTest(context));
-        if (isPerClass(context)) {
-            store.get(Meecrowave.class, Meecrowave.class).close();
-        }
-    }
-
-    @Override
-    public void beforeEach(final ExtensionContext context) {
-        if (!isPerClass(context)) {
-            doInject(context);
-            final ExtensionContext.Store store = 
context.getParent().orElse(context).getStore(NAMESPACE);
-            store.put(LifecyleState.class, onInjection(context, 
store.get(LifecyleState.class, LifecyleState.class)));
-        }
+        doInject(context);
+        store.put(LifecyleState.class, onInjection(context, null));
     }
 
-    @Override
-    public void afterEach(final ExtensionContext context) {
-        if (!isPerClass(context)) {
-            doRelease(context);
-        }
+    private MeecrowaveConfig findConfig(final ExtensionContext context) {
+        return findAnnotation(context.getElement(), MeecrowaveConfig.class)
+                .orElseGet(() -> context.getParent()
+                        .flatMap(ExtensionContext::getElement)
+                        .flatMap(it -> findAnnotation(it, 
MeecrowaveConfig.class))
+                        .orElse(null));
     }
 
-       private void doRelease(final ExtensionContext context) {
+    private void doRelease(final ExtensionContext context) {
         ofNullable(context.getStore(NAMESPACE).get(CreationalContext.class, 
CreationalContext.class))
                 .ifPresent(CreationalContext::release);
         scopes.beforeEach(context);
diff --git 
a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java
 
b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java
index b2b2e0a..85e2e4f 100644
--- 
a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java
+++ 
b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java
@@ -21,6 +21,7 @@ package org.apache.meecrowave.junit5;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
 
 import javax.inject.Inject;
 
@@ -29,7 +30,9 @@ import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
 
+@TestInstance(PER_CLASS)
 @MeecrowaveConfig(scanningPackageIncludes = 
"org.apache.meecrowave.junit5.bean")
 class MeecrowaveTestLifecycleTest {
     private static Appender global;
diff --git a/pom.xml b/pom.xml
index ac6b095..7dbc148 100644
--- a/pom.xml
+++ b/pom.xml
@@ -165,7 +165,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
-        <version>3.0.0-M3</version>
+        <version>3.0.0-M5</version>
         <configuration>
           <trimStackTrace>false</trimStackTrace>
         </configuration>

Reply via email to