Skip to content

Commit

Permalink
Clean up initialization context usage in bean runner
Browse files Browse the repository at this point in the history
Signed-off-by: Matt Sicker <boards@gmail.com>
  • Loading branch information
jvz committed Mar 8, 2020
1 parent b4d7cfc commit 5e17845
Showing 1 changed file with 6 additions and 9 deletions.
Expand Up @@ -55,7 +55,6 @@ public class BeanJUnit4Runner extends BlockJUnit4ClassRunner {
private BeanManager beanManager;
private InjectionFactory injectionFactory;
private Bean<?> testClassBean;
private InitializationContext<?> initializationContext;

public BeanJUnit4Runner(final Class<?> clazz) throws InitializationError {
super(clazz);
Expand Down Expand Up @@ -103,9 +102,7 @@ private <T> T createTestInstance() {
final Bean<T> testClassBean = testBean
.orElseThrow(() -> new UnsatisfiedBeanException(testClass));
this.testClassBean = testClassBean;
// FIXME: should we use a null bean or not? I'm still confused by the init context thing
initializationContext = beanManager.createInitializationContext(testClassBean);
return beanManager.getValue(testClassBean, initializationContext);
return beanManager.getValue(testClassBean, beanManager.createInitializationContext(null));
}

@Override
Expand All @@ -118,20 +115,20 @@ private <T> Statement genericMethodInvoker(final FrameworkMethod method, final T
return new Statement() {
@Override
public void evaluate() throws Throwable {
try (final BeanManager manager = beanManager;
final InitializationContext<T> context = TypeUtil.cast(initializationContext)) {
beanManager = null;
initializationContext = null;
try (final InitializationContext<T> context = beanManager.createInitializationContext(testClassBean)) {
final WithBeans methodBeans = method.getAnnotation(WithBeans.class);
if (methodBeans != null) {
manager.loadBeans(methodBeans.value());
beanManager.loadBeans(methodBeans.value());
}
final Class<T> testClass = TypeUtil.cast(getTestClass().getJavaClass());
final MetaClass<T> metaClass = elementManager.getMetaClass(testClass);
final MetaMethod<T, Void> metaMethod = metaClass.getMetaMethod(method.getMethod());
final Collection<InjectionPoint<?>> points =
elementManager.createExecutableInjectionPoints(metaMethod, testClassBean);
injectionFactory.forMethod(metaMethod, testInstance, points).accept(context);
} finally {
beanManager.close();
beanManager = null;
}
}
};
Expand Down

0 comments on commit 5e17845

Please sign in to comment.