Cómo Cargar, en la Primavera de Inicio de la Prueba Básica de la Primavera de la Aplicación de Contexto de la Adición de Sólo un Nombre de los Componentes?

0

Pregunta

Original

Estoy tratando de cargar, en una prueba de un Resorte de Arranque (v2.3.8) de la aplicación, sólo se denomina componentes en un básico de la Primavera de la aplicación de contexto. Más específicamente, quiero cargar, en una prueba en la Primavera, una aplicación de contexto que configura, al menos, el registro, la carga de propiedades externas, de validación (a través de Java API de Validación), y @Value-conectar pero sin MVC, los Datos de la app, etc. En esencia, quiero probar, a través de una restricción comentada de la interfaz (por ejemplo, @NotBlank), un @Service que ejercicios sólo el sistema de archivos local (sin MVC, los Datos de la app, o cualquier otro Resorte de Arranque de Prueba de la "corte") y tiene uno de los datos-miembro rellenan a través de @Value.

He intentado, en vano, muchos de anotaciones (y algunos de sus atributos inherentes a), en combinación diferente-subconjuntos: por ejemplo, @SpringBootTest, @Configuration, @ContextConfiguration, @TestConfiguration, @TypeExcludeFilters, etc. Por ejemplo:

@Validated
public interface SomeService {
    String someMethod (@NotBlank String someParam);
}
...
@Service
public class SomeServiceImpl implements SomeService {

    @Value("${some.value}")
    private String someValue;

    @Override
    public String someMethod(String someParam) {
        // do something with local file-system,
        // with someValue in hand, and
        // knowing someParam not blank
    }
}
...
@SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)
class SomeServiceTests {

    @Autowired
    private SomeService someService;

    @Test
    void throwConstraintViolationException_whenSomeParamNil() {
        assertThrows(
            ConstraintViolationException.class,
            ()->someService.someMethod(new String()));
    }
    ...
}

En este ejemplo, el atributo classes de @SpringBootTest la carga de la citada clase sino que oscurece todos los conceptos básicos (registro, validación, etc.) que yo también estoy buscando.

El siguiente fragmento, de Craig Muros", "la Primavera de Arranque en Acción," parece ser exactamente lo que estoy buscando, pero su principal herramienta (@SpringApplicationConfigurationes considerado obsoleto (y sus oficialmente recomendado por sustitución - @SpringBootTest - NO se comportan igual, al menos en cuanto atributo classes):

Aunque @ContextConfiguration hace un gran trabajo de carga de la Primavera de la aplicación contexto, no cargar con la totalidad de la Primavera de Inicio de tratamiento...SpringApplication no sólo carga el contexto de aplicación, pero también permite el registro, la carga externa propiedades de la aplicación.propiedades o aplicación.yml), y otras características de la Primavera El arranque. Si usted está usando @ContextConfiguration, usted no tendrá esas características. Para conseguir esas características en las pruebas de integración, se pueden intercambiar @ContextConfiguration para la Primavera de Arranque del @SpringApplicationConfiguration:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes=AddressBookConfiguration.class)
public class AddressServiceTests {
...
}

Allí, recibe la "plena Primavera de Inicio de tratamiento", pero añadiendo sólo la clase (@Servicecita (no todos @Component, @Controllery @Repository de su dominio).

Cómo hacer esto hoy, sin obsoleto @SpringApplicationConfiguration?

Actualización

Originalmente me dijo que mi (no se Craig Paredes") ejemplo (es decir, @SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)aunque la carga de la citada clase, oscurecida todos los conceptos básicos de una aplicación de contexto de que la Primavera de Arranque normalmente de carga. A través de la experimentación, he encontrado que esa afirmación es inexacta, en que no todos pero, sólo, algunos de los conceptos básicos que se oculta, es decir, la validación de la aplicación de Java API de Validación). En otras palabras, el registro, la carga de propiedades externas, y @Valor de conexión son, de hecho, cargado/configurado. Creo que has confundido, en todos mis muchas permutaciones/intentos.

1

Mejor respuesta

0

Sin embargo, después de más de experimentación, he encontrado una respuesta. Yo no puedo decir si es la mejor respuesta, pero es conciso y sin duda hace el truco...

import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

// automatically configures validation (implementation of Java Validation API)
@ImportAutoConfiguration(ValidationAutoConfiguration.class)

// obscures/disables any otherwise-automatic web-environment;
// automatically configures logging, loading of external properties, and @Value-plugging;
// and, beyond that, adds to application-context only _cited_ classes/configuration-classes
@SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)// full context loaded, if unqualified

public class SomeServiceTests {
...
}
2021-11-25 08:32:45

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................