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 (@SpringApplicationConfiguration
es 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 (@Service
cita (no todos @Component
, @Controller
y @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.