Skip to content
This repository was archived by the owner on Mar 25, 2025. It is now read-only.

Commit 41bd842

Browse files
committed
Added big test for JUnit runner and removed redundant code
1 parent b0e0a30 commit 41bd842

File tree

8 files changed

+905
-180
lines changed

8 files changed

+905
-180
lines changed

webtester-support-junit4/src/main/java/info/novatec/testit/webtester/junit/exceptions/NotOfInjectableFieldTypeException.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@
22

33
import java.lang.reflect.Field;
44

5-
import info.novatec.testit.webtester.junit.runner.internal.ConfigurationValueInjector;
6-
75

86
@SuppressWarnings("serial")
97
public class NotOfInjectableFieldTypeException extends IllegalTestClassStructureException {
108

119
public NotOfInjectableFieldTypeException(Field field) {
12-
super("the configuration value field '" + field + "' is not of an injectable type! Injectable types are: "
13-
+ ConfigurationValueInjector.getInjectableFieldClasses());
10+
super("the configuration value field '" + field
11+
+ "' is not of an injectable type! Injectable types are: Boolean, Integer, Long, Float, Double and String");
1412
}
1513

1614
}

webtester-support-junit4/src/main/java/info/novatec/testit/webtester/junit/runner/WebTesterJUnitRunner.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,16 @@
1818

1919
import info.novatec.testit.webtester.browser.Browser;
2020
import info.novatec.testit.webtester.config.Configuration;
21-
import info.novatec.testit.webtester.junit.utils.ReflectionUtils;
2221
import info.novatec.testit.webtester.junit.annotations.ConfigurationValue;
2322
import info.novatec.testit.webtester.junit.annotations.CreateUsing;
2423
import info.novatec.testit.webtester.junit.annotations.EntryPoint;
2524
import info.novatec.testit.webtester.junit.annotations.Primary;
26-
import info.novatec.testit.webtester.junit.exceptions.NoManagedBrowserException;
27-
import info.novatec.testit.webtester.junit.exceptions.NoPrimaryBrowserException;
28-
import info.novatec.testit.webtester.junit.exceptions.NoUniquePrimaryBrowserException;
2925
import info.novatec.testit.webtester.junit.runner.internal.AbstractTestBrowser;
3026
import info.novatec.testit.webtester.junit.runner.internal.ClassTestBrowser;
3127
import info.novatec.testit.webtester.junit.runner.internal.ConfigurationValueInjector;
3228
import info.novatec.testit.webtester.junit.runner.internal.MethodTestBrowser;
3329
import info.novatec.testit.webtester.junit.runner.internal.TestClassPlausibilityChecker;
30+
import info.novatec.testit.webtester.junit.utils.ReflectionUtils;
3431

3532

3633
/**
@@ -135,10 +132,12 @@ public class WebTesterJUnitRunner extends BlockJUnit4ClassRunner {
135132
private ReflectionUtils reflectionUtils = new ReflectionUtils();
136133
private List<ClassTestBrowser> classBrowsers = new ArrayList<>();
137134
private List<MethodTestBrowser> methodBrowsers = new ArrayList<>();
135+
private ConfigurationValueInjector injector;
138136

139137
public WebTesterJUnitRunner(Class<?> testClass) throws InitializationError {
140138
super(testClass);
141139
new TestClassPlausibilityChecker(testClass).assertPlausibilityOfTestClass();
140+
injector = new ConfigurationValueInjector();
142141
}
143142

144143
@Override
@@ -169,7 +168,7 @@ private void initializeClassLevel() {
169168
private void injectConfigurationValuesIntoStaticFields() {
170169
if (configurationValuesAnnotationIsUsedOnClassLevel()) {
171170
Configuration configuration = getPrimaryBrowser().getBrowser().configuration();
172-
ConfigurationValueInjector.injectStatics(configuration, getTestClass().getJavaClass());
171+
injector.injectStatics(configuration, getTestClass().getJavaClass());
173172
}
174173
}
175174

@@ -256,7 +255,7 @@ private void executeBeforeTestForAllBrowsers() throws ReflectiveOperationExcepti
256255
private void injectConfigurationValuesIntoInstanceFields() {
257256
if (configurationValuesAnnotationIsUsedOnMethodLevel()) {
258257
Configuration configuration = getPrimaryBrowser().getBrowser().configuration();
259-
ConfigurationValueInjector.inject(configuration, target);
258+
injector.inject(configuration, target);
260259
}
261260
}
262261

@@ -309,19 +308,12 @@ private void executeAfterTestForAllBrowsers() {
309308
/* START primary browser calculation */
310309

311310
private AbstractTestBrowser getPrimaryBrowser() {
312-
assertThatAtLeastOneBrowserIsManaged();
313311
if (numberOfManagedBrowsers() == 1) {
314312
return getAllBrowsersRegardlessOfScope().get(0);
315313
}
316314
return getUniquePrimaryBrowserCandidate();
317315
}
318316

319-
private void assertThatAtLeastOneBrowserIsManaged() {
320-
if (numberOfManagedBrowsers() == 0) {
321-
throw new NoManagedBrowserException();
322-
}
323-
}
324-
325317
private int numberOfManagedBrowsers() {
326318
return classBrowsers.size() + methodBrowsers.size();
327319
}
@@ -330,16 +322,9 @@ private AbstractTestBrowser getUniquePrimaryBrowserCandidate() {
330322
AbstractTestBrowser primaryBrowserCandidate = null;
331323
for (AbstractTestBrowser browser : getAllBrowsersRegardlessOfScope()) {
332324
if (browser.isPrimaryCandidate()) {
333-
if (primaryBrowserCandidate == null) {
334-
primaryBrowserCandidate = browser;
335-
} else {
336-
throw new NoUniquePrimaryBrowserException();
337-
}
325+
primaryBrowserCandidate = browser;
338326
}
339327
}
340-
if (primaryBrowserCandidate == null) {
341-
throw new NoPrimaryBrowserException();
342-
}
343328
return primaryBrowserCandidate;
344329
}
345330

webtester-support-junit4/src/main/java/info/novatec/testit/webtester/junit/runner/internal/ConfigurationValueInjector.java

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,59 @@
33
import java.lang.reflect.Field;
44
import java.lang.reflect.Modifier;
55
import java.lang.reflect.UndeclaredThrowableException;
6-
import java.util.Collections;
76
import java.util.HashMap;
87
import java.util.Map;
9-
import java.util.Set;
108

119
import org.apache.commons.lang.IllegalClassException;
1210

1311
import info.novatec.testit.webtester.config.Configuration;
1412
import info.novatec.testit.webtester.junit.annotations.ConfigurationValue;
13+
import info.novatec.testit.webtester.junit.exceptions.NotOfInjectableFieldTypeException;
1514

1615

17-
public final class ConfigurationValueInjector {
16+
public class ConfigurationValueInjector {
1817

1918
private static final String UNINJECTABLE_FIELD_TYPE = "cannot inject configuration values into fields of type ";
2019
private static final Object STATIC_TARGET = null;
2120

22-
private static final Map<Class<?>, Injector> INJECTOR_MAP = new HashMap<>();
21+
private final Map<Class<?>, Injector> injectorMap = new HashMap<>();
2322

24-
static {
25-
26-
INJECTOR_MAP.put(String.class,
23+
public ConfigurationValueInjector() {
24+
injectorMap.put(String.class,
2725
(config, key, field, target) -> field.set(target, config.getStringProperty(key).get()));
28-
29-
INJECTOR_MAP.put(Integer.class,
26+
injectorMap.put(Integer.class,
3027
(config, key, field, target) -> field.set(target, config.getIntegerProperty(key).get()));
31-
32-
INJECTOR_MAP.put(Long.class,
28+
injectorMap.put(Long.class, //
3329
(config, key, field, target) -> field.set(target, config.getLongProperty(key).get()));
34-
35-
INJECTOR_MAP.put(Float.class,
30+
injectorMap.put(Float.class, //
3631
(config, key, field, target) -> field.set(target, config.getFloatProperty(key).get()));
37-
38-
INJECTOR_MAP.put(Double.class,
32+
injectorMap.put(Double.class,
3933
(config, key, field, target) -> field.set(target, config.getDoubleProperty(key).get()));
40-
41-
INJECTOR_MAP.put(Boolean.class,
34+
injectorMap.put(Boolean.class,
4235
(config, key, field, target) -> field.set(target, config.getBooleanProperty(key).get()));
43-
4436
}
4537

46-
public static void injectStatics(Configuration config, Class<?> targetClass) {
38+
public void injectStatics(Configuration config, Class<?> targetClass) {
4739
for (Field field : targetClass.getDeclaredFields()) {
4840
if (Modifier.isStatic(field.getModifiers())) {
4941
injectStaticField(config, field);
5042
}
5143
}
5244
}
5345

54-
public static void inject(Configuration config, Object target) {
46+
public void inject(Configuration config, Object target) {
5547
for (Field field : target.getClass().getDeclaredFields()) {
5648
if (!Modifier.isStatic(field.getModifiers())) {
5749
injectField(config, field, target);
5850
}
5951
}
6052
}
6153

62-
private static void injectStaticField(Configuration config, Field field) {
54+
private void injectStaticField(Configuration config, Field field) {
6355
injectField(config, field, STATIC_TARGET);
6456
}
6557

66-
private static void injectField(Configuration config, Field field, Object target) {
58+
private void injectField(Configuration config, Field field, Object target) {
6759

6860
ConfigurationValue configurationValue = field.getAnnotation(ConfigurationValue.class);
6961
if (configurationValue == null) {
@@ -73,7 +65,7 @@ private static void injectField(Configuration config, Field field, Object target
7365

7466
field.setAccessible(true);
7567

76-
Injector injector = INJECTOR_MAP.get(field.getType());
68+
Injector injector = injectorMap.get(field.getType());
7769
if (injector == null) {
7870
throw new IllegalClassException(UNINJECTABLE_FIELD_TYPE + field.getType());
7971
}
@@ -88,16 +80,14 @@ private static void injectField(Configuration config, Field field, Object target
8880

8981
}
9082

91-
public static boolean canInjectValue(Field field) {
92-
return INJECTOR_MAP.containsKey(field.getType());
93-
}
94-
95-
public static Set<Class<?>> getInjectableFieldClasses() {
96-
return Collections.unmodifiableSet(INJECTOR_MAP.keySet());
83+
public void assertCanInjectValue(Field field) {
84+
if (!canInjectValue(field)) {
85+
throw new NotOfInjectableFieldTypeException(field);
86+
}
9787
}
9888

99-
private ConfigurationValueInjector() {
100-
// utility constructor
89+
public boolean canInjectValue(Field field) {
90+
return injectorMap.containsKey(field.getType());
10191
}
10292

10393
private interface Injector {

webtester-support-junit4/src/main/java/info/novatec/testit/webtester/junit/runner/internal/TestClassPlausibilityChecker.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,25 @@
1414
import info.novatec.testit.webtester.junit.exceptions.NoPrimaryBrowserException;
1515
import info.novatec.testit.webtester.junit.exceptions.NoStaticPrimaryBrowserException;
1616
import info.novatec.testit.webtester.junit.exceptions.NoUniquePrimaryBrowserException;
17-
import info.novatec.testit.webtester.junit.exceptions.NotOfInjectableFieldTypeException;
1817
import info.novatec.testit.webtester.junit.utils.ReflectionUtils;
1918

2019

2120
public class TestClassPlausibilityChecker {
2221

22+
private final Class<?> testClass;
23+
private final ConfigurationValueInjector injector;
24+
2325
private Set<Field> allFields;
2426

2527
public TestClassPlausibilityChecker(Class<?> testClass) {
26-
this.allFields = new ReflectionUtils().getAllFieldsOfClassHierarchy(testClass);
28+
this.testClass = testClass;
29+
this.injector = new ConfigurationValueInjector();
2730
}
2831

2932
public void assertPlausibilityOfTestClass() {
3033

34+
this.allFields = new ReflectionUtils().getAllFieldsOfClassHierarchy(testClass);
35+
3136
assertThatNoMoreThenOnePrimaryBrowserIsDeclared();
3237

3338
List<Field> configurationValueFields = getConfigurationValueFields();
@@ -51,7 +56,7 @@ private void assertThatNoMoreThenOnePrimaryBrowserIsDeclared() {
5156
private void assertPlausibilityOfConfigurationValueFields(List<Field> configurationValueFields,
5257
Field primaryBrowserField) {
5358
for (Field field : configurationValueFields) {
54-
assertInjectableTypeForConfigurationValueField(field);
59+
injector.assertCanInjectValue(field);
5560
assertStaticPrimaryBrowserForStaticConfigurationValueField(field, primaryBrowserField);
5661
}
5762
}
@@ -72,11 +77,8 @@ private Field getRequiredPrimaryBrowserInstance() {
7277
List<Field> primaryBrowserFields = getPrimaryBrowserFields(managedBrowserFields);
7378
if (primaryBrowserFields.isEmpty()) {
7479
throw new NoPrimaryBrowserException();
75-
}
76-
if (primaryBrowserFields.size() == 1) {
77-
primaryBrowserField = primaryBrowserFields.get(0);
7880
} else {
79-
throw new NoUniquePrimaryBrowserException();
81+
primaryBrowserField = primaryBrowserFields.get(0);
8082
}
8183
}
8284

@@ -108,12 +110,6 @@ private List<Field> getConfigurationValueFields() {
108110
.collect(Collectors.toList());
109111
}
110112

111-
private void assertInjectableTypeForConfigurationValueField(Field field) {
112-
if (!ConfigurationValueInjector.canInjectValue(field)) {
113-
throw new NotOfInjectableFieldTypeException(field);
114-
}
115-
}
116-
117113
private void assertStaticPrimaryBrowserForStaticConfigurationValueField(Field field, Field primaryBrowserField) {
118114
if (isStatic(field) && !isStatic(primaryBrowserField)) {
119115
throw new NoStaticPrimaryBrowserException(

webtester-support-junit4/src/test/java/info/novatec/testit/webtester/junit/runner/WebTesterJUnitRunnerConfigurationValuesTest.java

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)