Ako Načítať, na Jar Boot Test, Základné Jar Aplikácie Kontexte Pridávať Len s Názvom Komponenty?

0

Otázka

Pôvodný

Snažím sa načítať, v test Jar Boot (v2.3.8) žiadosť, len s názvom komponenty v základných Jar aplikácie kontexte. Presnejšie, som chcete načítať, v test, Jar aplikácie-kontext, ktorý konfiguruje najmenej práce, nakladanie vonkajšie vlastnosti, overenie (cez Java API pre Overenie), a @Value-zapojenie, ale bez MVC, Údaje JPA, atď. V podstate chcem otestovať prostredníctvom obmedzenia-annotated rozhranie (napr. @NotBlanksa ), @Service ktoré cvičenia len lokálneho súborového systému (č MVC, Údaje JPA, alebo akékoľvek iné Jar Boot Test "plátok"), a má jednu údajov-člen obývaných prostredníctvom @Value.

Snažil som sa na nič, mnoho anotácie (a niektoré ich vlastné atribúty), v rôznych kombinácii-podskupiny: napr. @SpringBootTest, @Configuration, @ContextConfiguration, @TestConfiguration, @TypeExcludeFiltersatď. Naprí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 príklade, atribút classes z @SpringBootTest zaťaženie citované triedy, ale zakrýva všetky základy (zapisovanie, overenie, atď.) že som tiež hľadá.

Nasledujúci výňatok z Craig Múrov", "Jar Boot v Akcii," sa zdá byť presne to, čo som v hľadaní, ale jeho hlavný nástroj (@SpringApplicationConfiguration) je teraz zavrhované (a jeho oficiálne odporúčaná výmena - @SpringBootTest - nemá správať rovnako, aspoň pokiaľ ide atribút classes):

Hoci @ContextConfiguration robí skvelú prácu s naložením na Jar aplikácie kontexte, to nie je zaťaženie, je to s plnou Jar Boot liečbu...SpringApplication nie len načíta aplikácie kontexte, ale tiež umožňuje zapisovanie do denníka, načítanie externých vlastnosti (aplikácie.vlastnosti alebo aplikácie.yml), a ďalšie funkcie na Jar Boot. Ak používate @ContextConfiguration, nebudete mať tieto funkcie. Ak chcete získať tieto funkcie späť na integráciu testov, môžete vymeniť @ContextConfiguration na Jar Boot je @SpringApplicationConfiguration:

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

Tam, dostane "celú Jar Boot liečba", ale pridávať len triedy (@Service) on cituje (nie každý @Component, @Controllera @Repository jeho domény).

Ako to urobiť dnes, bez zavrhované @SpringApplicationConfiguration?

Aktualizácia

Pôvodne som uviedol, že môj (nie Craig Múry) príklad (a to @SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE), aj keď je naložený citované triedy, nejasné všetky základy aplikácie-súvislosti, že Jar Boot by normálne zaťaženie. Cez ďalšie experimentovanie, zistil som, že toto vyhlásenie bolo nepresné, v tom, že nie všetky , ale iba niektoré základy sú zašifrované, a to validácie (implementácia Java API pre Overenie). Inými slovami, zapisovanie, načítanie externých vlastnosti, a @Hodnota-zapojenie sa, naozaj, naložený/nakonfigurovaný. Myslím si, že musím dostali zmätený, vo všetkých mojich mnohých permutácie, variácie/pokusov.

1

Najlepšiu odpoveď

0

Po ešte viac experimentovania, som našiel odpoveď. Nemôžem povedať, či to je najlepšia odpoveď, ale je to stručné a určite robí 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 iných jazykoch

Táto stránka je v iných jazykoch

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