Skip to content

Commit 4d88eb0

Browse files
authored
[test] allow list injection for tests (#761)
* [test] allow list injection for tests now can do ```java @InjectTest class ListInject { @Inject List<Somei> testSomei; @test void test() { assertThat(testSomei).isNotEmpty(); } } ``` * also optional * Update MetaReader.java * remove if
1 parent 7ad2927 commit 4d88eb0

File tree

2 files changed

+58
-14
lines changed

2 files changed

+58
-14
lines changed

inject-test/src/main/java/io/avaje/inject/test/MetaReader.java

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
package io.avaje.inject.test;
22

3-
import io.avaje.inject.BeanScope;
4-
import io.avaje.inject.BeanScopeBuilder;
5-
import jakarta.inject.Inject;
6-
import jakarta.inject.Named;
7-
import jakarta.inject.Qualifier;
8-
import org.mockito.ArgumentCaptor;
9-
import org.mockito.Captor;
10-
import org.mockito.Mock;
11-
import org.mockito.Spy;
12-
import org.mockito.internal.configuration.plugins.Plugins;
13-
import org.mockito.internal.util.reflection.GenericMaster;
14-
153
import java.lang.annotation.Annotation;
164
import java.lang.reflect.Field;
175
import java.lang.reflect.Modifier;
6+
import java.lang.reflect.ParameterizedType;
187
import java.lang.reflect.Type;
198
import java.util.ArrayList;
209
import java.util.LinkedList;
2110
import java.util.List;
11+
import java.util.Optional;
12+
13+
import org.mockito.ArgumentCaptor;
14+
import org.mockito.Captor;
15+
import org.mockito.Mock;
16+
import org.mockito.Spy;
17+
import org.mockito.internal.configuration.plugins.Plugins;
18+
import org.mockito.internal.util.reflection.GenericMaster;
19+
20+
import io.avaje.inject.BeanScope;
21+
import io.avaje.inject.BeanScopeBuilder;
22+
import jakarta.inject.Inject;
23+
import jakarta.inject.Named;
24+
import jakarta.inject.Qualifier;
2225

2326
final class MetaReader {
2427

@@ -349,9 +352,28 @@ Object get(Object instance) {
349352
}
350353

351354
void setFromScope(BeanScope beanScope, Object testInstance) throws IllegalAccessException {
352-
if (!valueAlreadyProvided) {
353-
set(field, beanScope.get(type(), name), testInstance);
355+
if (valueAlreadyProvided) {
356+
return;
357+
}
358+
final var type = type();
359+
360+
if (type instanceof ParameterizedType) {
361+
final var parameterizedType = (ParameterizedType) type;
362+
final var rawType = parameterizedType.getRawType();
363+
final var typeArguments = parameterizedType.getActualTypeArguments();
364+
365+
if (rawType.equals(List.class)) {
366+
set(field, beanScope.list(typeArguments[0]), testInstance);
367+
return;
368+
}
369+
370+
if (rawType.equals(Optional.class)) {
371+
set(field, beanScope.getOptional(typeArguments[0], name), testInstance);
372+
return;
373+
}
354374
}
375+
376+
set(field, beanScope.get(type, name), testInstance);
355377
}
356378

357379
void setFromPlugin(Object value, Object testInstance) throws IllegalAccessException {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.example.coffee.list;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.List;
6+
7+
import org.junit.jupiter.api.Test;
8+
9+
import io.avaje.inject.test.InjectTest;
10+
import jakarta.inject.Inject;
11+
12+
@InjectTest
13+
class ListInject {
14+
15+
@Inject List<Somei> testSomei;
16+
17+
@Test
18+
void test() {
19+
20+
assertThat(testSomei).isNotEmpty();
21+
}
22+
}

0 commit comments

Comments
 (0)