Jak Nahrát, na Jaře Boot Test, Základní Jarní Aplikace-Souvislosti Přidání Pouze Jménem Komponenty?

0

Otázka

Originální

Snažím se načíst, test Spring Boot (v2.3.8) aplikace, pouze pojmenované složky v základní Jarní aplikace-kontextu. Přesněji řečeno, chci, aby zatížení, v testu, Jarní aplikace-kontext, který konfiguruje alespoň přihlašování, načítání externích vlastností, ověřování (přes Java API Validace), a @Value-připojením, ale bez MVC, Data JPA, atd. V podstatě, chci testovat, a to prostřednictvím omezení-komentovaný rozhraní (např. @NotBlank), @Service že cvičení pouze místní systém souborů (žádné MVC, Data JPA, nebo jiné Jarní Boot Test "plátek") a má jeden data-člen osídlené přes @Value.

Snažil jsem se, ale marně, mnoho popisů (a některé z jejich vlastní atributy), v různé kombinaci-podskupiny: např. @SpringBootTest, @Configuration, @ContextConfiguration, @TestConfiguration, @TypeExcludeFiltersatd. Například:

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

V tomto příkladu atribut classes z @SpringBootTest načte citované třídy, ale zakrývá všechny základy (přihlašování, ověřování, atd.) to, že jsem také hledá.

Následující výňatek, z Craig Zdi' "Spring Boot v Akci," se zdá být přesně to, co hledám, ale jeho hlavní nástroj (@SpringApplicationConfiguration) je nyní zastaralé (a jeho oficiálně-doporučená výměna - @SpringBootTest - NEBUDE chovat stejně, alespoň pokud jde o atribut classes):

Přestože @ContextConfiguration dělá skvělou práci nakládky Jarní aplikace souvislosti, to nenačte to s plnou Spring Boot léčba...SpringApplication nejen, že aplikace načte kontextu, ale také umožňuje přihlašování, načítání externích vlastnosti (aplikace.vlastnosti nebo aplikace.yml), a další funkce Jara Boot. Pokud používáte @ContextConfiguration, nebudete mít tyto funkce. Dostat tyto funkce zpět ve své integrační testy, můžete vyměnit @ContextConfiguration pro Jaro Boot je @SpringApplicationConfiguration:

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

Tam, dostane "plnou Spring Boot léčba", ale dodal, pouze třídy (@Service) cituje (ne každý @Component, @Controllera @Repository z jeho domény).

Jak to udělat, dnes, bez zastaralé @SpringApplicationConfiguration?

Aktualizace

Původně jsem uvedla, že můj (ne Craig Stěny') příklad (tj. @SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE),, i když je načten uvedený třídy, skryté všechny základy aplikace-souvislosti, že na Jaře Boot by normálně načíst. Dalším experimentování jsem zjistil, že toto prohlášení bylo nepřesné, v tom, že ne všechny , ale pouze některé základy jsou skryté, a to ověření (implementaci Java API Validace). Jinými slovy, těžba, nakládka vnější vlastnosti, a @Hodnota-zapojení jsou skutečně načten/konfigurovat. Myslím, že jsem se musel dostat zmatený, ve všech svých mnoha obměnami/pokusy.

1

Nejlepší odpověď

0

Poté, co ještě více experimentování, jsem našel odpověď. Nemůžu říct, zda je to nejlepší odpověď, ale je to stručné a určitě dělá trik...

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

V jiných jazycích

Tato stránka je v jiných jazycích

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