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
, @TypeExcludeFilters
atd. 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
, @Controller
a @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.