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. @NotBlank
sa ), @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
, @TypeExcludeFilters
atď. 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
, @Controller
a @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.