Skip to content

Commit

Permalink
BQRuntimeChecker - static helper for runtime assertions #211
Browse files Browse the repository at this point in the history
* refactoring to a separate class BQRuntimeChecker, as we are not testing the provider here, but rather the state of
  runtime
* changing a list of modules to vararg. It seems to be simpler to call it like that from the tests
  • Loading branch information
andrus committed Feb 18, 2018
1 parent 3a41444 commit 6da73ee
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 59 deletions.
1 change: 1 addition & 0 deletions RELEASE-NOTES.md
Expand Up @@ -10,6 +10,7 @@
* #198 DI config binding API to facilitate configuration reuse
* #199 Tests: swallowed BQDaemonTestFactory startup errors
* #201 Speed up BQDaemonTestFactory
* #211 BQRuntimeChecker - static helper for runtime assertions

## 0.24

Expand Down
@@ -1,12 +1,10 @@
package io.bootique.test.junit;

import com.google.inject.Module;
import io.bootique.BQModuleProvider;
import io.bootique.BQRuntime;
import io.bootique.meta.module.ModuleMetadata;
import io.bootique.meta.module.ModulesMetadata;

import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.ServiceLoader;
Expand All @@ -15,9 +13,6 @@
import java.util.stream.StreamSupport;

import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.toList;
import static org.hamcrest.core.IsCollectionContaining.hasItems;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

Expand Down Expand Up @@ -50,31 +45,6 @@ public static void testPresentInJar(Class<? extends BQModuleProvider> provider)
new BQModuleProviderChecker(provider).testPresentInJar();
}

/**
* Verifies that runtime contains expected modules.
*
* @param bqRuntime
* @param moduleList
* @since 0.25
*/
public static void testModulesLoaded(BQRuntime bqRuntime, List<Class<? extends Module>> moduleList) {
final ModulesMetadata modulesMetadata = bqRuntime.getInstance(ModulesMetadata.class);

final List<String> actualModules = modulesMetadata
.getModules()
.stream()
.map(ModuleMetadata::getName)
.collect(toList());

final String[] expectedModules = moduleList
.stream()
.map(Class::getSimpleName)
.toArray(String[]::new);

// Using class names for checking module existing - weak.
assertThat(actualModules, hasItems(expectedModules));
}

/**
* Checks that config metadata for the Module created by the tested provider can be loaded without errors. Does not
* verify the actual metadata contents.
Expand Down
@@ -0,0 +1,45 @@
package io.bootique.test.junit;

import com.google.inject.Module;
import io.bootique.BQRuntime;
import io.bootique.meta.module.ModuleMetadata;
import io.bootique.meta.module.ModulesMetadata;

import java.util.List;

import static java.util.stream.Collectors.toList;
import static org.hamcrest.core.IsCollectionContaining.hasItems;
import static org.junit.Assert.assertThat;

/**
* A helper class for writing test assertions against a {@link BQRuntime}.
*
* @since 0.25
*/
public class BQRuntimeChecker {

/**
* Verifies that runtime contains expected modules.
*
* @param runtime a Bootique runtime whose contents we are testing.
* @param expectedModules a vararg array of expected module types.
*/
public static void testModulesLoaded(BQRuntime runtime, Class<? extends Module>... expectedModules) {

final ModulesMetadata modulesMetadata = runtime.getInstance(ModulesMetadata.class);

final List<String> actualModules = modulesMetadata
.getModules()
.stream()
.map(ModuleMetadata::getName)
.collect(toList());

final String[] expectedModuleNames = new String[expectedModules.length];
for (int i = 0; i < expectedModules.length; i++) {
expectedModuleNames[i] = expectedModules[i].getSimpleName();
}

// Using class names for checking module existing - weak.
assertThat(actualModules, hasItems(expectedModuleNames));
}
}
@@ -1,21 +1,12 @@
package io.bootique.test.junit;

import com.google.inject.Binder;
import com.google.inject.Module;
import io.bootique.BQCoreModule;
import io.bootique.BQModuleProvider;
import io.bootique.BQRuntime;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;

import static java.util.Collections.singletonList;

public class BQModuleProviderCheckerTest {

@Rule
public BQTestFactory testFactory = new BQTestFactory();

@Test
public void testMatchingProvider() {
BQModuleProvider p = new BQModuleProviderChecker(P1.class).matchingProvider();
Expand All @@ -29,18 +20,6 @@ public void testTestMetadata() {
new BQModuleProviderChecker(P1.class).testMetadata();
}

@Test
public void testTestModulesLoaded() {
final BQRuntime runtime = testFactory.app().createRuntime();
BQModuleProviderChecker.testModulesLoaded(runtime, singletonList(BQCoreModule.class));
}

@Test(expected = AssertionError.class)
public void testTestModulesNotLoaded() {
final BQRuntime runtime = testFactory.app().createRuntime();
BQModuleProviderChecker.testModulesLoaded(runtime, singletonList(NonLoadedModule.class));
}

public static class P1 implements BQModuleProvider {

@Override
Expand All @@ -50,11 +29,3 @@ public Module module() {
}
}
}


class NonLoadedModule implements Module {

@Override
public void configure(Binder binder) {
}
}
@@ -0,0 +1,34 @@
package io.bootique.test.junit;

import com.google.inject.Binder;
import com.google.inject.Module;
import io.bootique.BQCoreModule;
import io.bootique.BQRuntime;
import org.junit.Rule;
import org.junit.Test;

public class BQRuntimeCheckerTest {

@Rule
public BQTestFactory testFactory = new BQTestFactory();

@Test
public void testTestModulesLoaded() {
final BQRuntime runtime = testFactory.app().createRuntime();
BQRuntimeChecker.testModulesLoaded(runtime, BQCoreModule.class);
}

@Test(expected = AssertionError.class)
public void testTestModulesNotLoaded() {
final BQRuntime runtime = testFactory.app().createRuntime();
BQRuntimeChecker.testModulesLoaded(runtime, NonLoadedModule.class);
}
}


class NonLoadedModule implements Module {

@Override
public void configure(Binder binder) {
}
}

0 comments on commit 6da73ee

Please sign in to comment.