Cum pentru a Încărca, în Primăvara anului Boot de Testare, de Bază de Cerere Primăvară-Context Adăugând Doar Nume Componente?

0

Problema

Original

Eu sunt încercarea de a încărca, într-o încercare de-un Izvor de Boot (v2.3.8) cerere, numai nume componente într-o bază de cerere Primăvară-context. Mai exact, vreau să se încarce, într-un test, o cerere Primăvară-contextul în care se configurează cel puțin logare, de încărcare de externe proprietăți, de validare (prin Java API Validare), și @Value-conectarea dar fără MVC, Date APP, etc. În esență, vreau să testez, printr-o constrângere-adnotat de interfață (de exemplu, @NotBlank), o @Service care exercită numai sistemul de fișiere local (nu MVC, Date APP, sau orice alte Spring Boot Test "felie") și are un date-membru populate prin @Value.

Am încercat, fără rezultat, multe adnotări (și unele dintre atributele inerente), în diferite combinații-subseturi: de exemplu, @SpringBootTest, @Configuration, @ContextConfiguration, @TestConfiguration, @TypeExcludeFilters, etc. De exemplu:

@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()));
    }
    ...
}

În acest exemplu, atribut classes de @SpringBootTest încarcă citată de clasă, dar ascunde toate elementele de bază (de exploatare forestieră, validarea, etc.) care sunt, de asemenea, caută.

Următorul fragment, de la Craig Pereți' "Spring Boot-eze în Acțiune," pare a fi exact ceea ce caut, dar principalul său instrument (@SpringApplicationConfiguration) este acum depreciat (și oficial de schimb recomandate - @SpringBootTest - NU se comporta la fel, cel puțin în ceea ce privește atributul classes):

Deși @ContextConfiguration face o treabă excelentă de încărcare la cerere Primăvară context, nu-l încărcați cu full Spring Boot tratament...SpringApplication nu numai sarcini de contextul de aplicare, dar, de asemenea, permite de logare, de încărcare de externe proprietăți (de aplicare.proprietăți sau aplicație.yml), și alte caracteristici de Primăvară Boot. Dacă utilizați @ContextConfiguration, nu vei obține aceste caracteristici. Pentru a obține aceste caracteristici înapoi în teste de integrare, pe care le puteți schimba @ContextConfiguration pentru Primavara Boot e @SpringApplicationConfiguration:

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

Acolo, el devine "plin de Primăvară Boot tratament", dar adăugând doar clasa (@Service) el citează (nu de fiecare @Component, @Controllerși @Repository din domeniul său).

Cum pentru a face acest lucru astăzi, fără a depreciat @SpringApplicationConfiguration?

Update

Am declarat inițial că a mea (nu Craig Pereți') exemplu (și anume @SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE), deși este încărcat, citată de clasă, ascunse toate elementele de bază ale unei cereri-context că Primăvara Boot-eze în mod normal de încărcare. Prin mai multe experimente, am constatat că această declarație a fost inexacte, în care nu toate , dar numai unele dintre elementele de bază sunt acoperite, și anume de validare (implementarea Java API Validare). Cu alte cuvinte, exploatarea, de încărcare de externe proprietăți, și @Valoarea-conectarea sunt, într-adevăr, încărcat/configurat. Cred că am devenit confuz, de multe permutări/încercări.

1

Cel mai bun răspuns

0

După mai multe experimente, am găsit un răspuns. Nu pot spune daca e mai bun răspuns, dar e concis și cu siguranță nu truc...

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

În alte limbi

Această pagină este în alte limbi

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