fix(java): initialize spanner test environment class at build-time (#734)

diff --git a/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/OpenCensusFeature.java b/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/OpenCensusFeature.java
index f2b6cb2..e718f28 100644
--- a/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/OpenCensusFeature.java
+++ b/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/OpenCensusFeature.java
@@ -25,11 +25,15 @@
 @AutomaticFeature
 final class OpenCensusFeature implements Feature {
 
-  private static final String OPEN_CENSUS_CLASS = "io.opencensus.impl.tags.TagsComponentImpl";
+  private static final String TAGS_COMPONENT_CLASS = "io.opencensus.impl.tags.TagsComponentImpl";
+  private static final String STATS_COMPONENT_CLASS = "io.opencensus.impl.stats.StatsComponentImpl";
 
   @Override
   public void beforeAnalysis(BeforeAnalysisAccess access) {
-    if (access.findClassByName(OPEN_CENSUS_CLASS) != null) {
+    if (access.findClassByName(STATS_COMPONENT_CLASS) != null) {
+      registerForReflectiveInstantiation(access, STATS_COMPONENT_CLASS);
+    }
+    if (access.findClassByName(TAGS_COMPONENT_CLASS) != null) {
       registerForReflectiveInstantiation(access, "io.opencensus.impl.metrics.MetricsComponentImpl");
       registerForReflectiveInstantiation(access, "io.opencensus.impl.tags.TagsComponentImpl");
       registerForReflectiveInstantiation(access, "io.opencensus.impl.trace.TraceComponentImpl");
diff --git a/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/SpannerFeature.java b/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/SpannerFeature.java
index e902c77..3e54958 100644
--- a/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/SpannerFeature.java
+++ b/java-core/native-image-support/src/main/java/com/google/cloud/nativeimage/features/clients/SpannerFeature.java
@@ -27,9 +27,14 @@
 final class SpannerFeature implements Feature {
 
   private static final String SPANNER_CLASS = "com.google.spanner.v1.SpannerGrpc";
+  private static final String SPANNER_TEST_CLASS = "com.google.cloud.spanner.GceTestEnvConfig";
 
   @Override
   public void beforeAnalysis(BeforeAnalysisAccess access) {
+    Class<?> spannerTestClass = access.findClassByName(SPANNER_TEST_CLASS);
+    if (spannerTestClass != null) {
+      NativeImageUtils.registerConstructorsForReflection(access, SPANNER_TEST_CLASS);
+    }
     Class<?> spannerClass = access.findClassByName(SPANNER_CLASS);
     if (spannerClass != null) {
       NativeImageUtils.registerClassHierarchyForReflection(
diff --git a/java-core/native-image-support/src/main/resources/META-INF/native-image/com.google.cloud/google-cloud-core/native-image.properties b/java-core/native-image-support/src/main/resources/META-INF/native-image/com.google.cloud/google-cloud-core/native-image.properties
index 1b42361..2228a1f 100644
--- a/java-core/native-image-support/src/main/resources/META-INF/native-image/com.google.cloud/google-cloud-core/native-image.properties
+++ b/java-core/native-image-support/src/main/resources/META-INF/native-image/com.google.cloud/google-cloud-core/native-image.properties
@@ -2,7 +2,8 @@
 --enable-url-protocols=https,http \
 --initialize-at-build-time=org.conscrypt,\
   org.slf4j.LoggerFactory,\
-  org.junit.platform.engine.TestTag \
+  org.junit.platform.engine.TestTag,\
+  com.google.cloud.spanner.IntegrationTestEnv \
 --initialize-at-run-time=io.grpc.netty.shaded.io.netty.handler.ssl.OpenSsl,\
     io.grpc.netty.shaded.io.netty.internal.tcnative.SSL,\
     io.grpc.netty.shaded.io.netty.internal.tcnative.CertificateVerifier,\