Eu sou novo em frameworks (acabei de passar a classe) e esta é minha primeira vez usando o Spring Boot.
Estou tentando executar um teste Junit simples para ver se meus CrudRepositories estão realmente funcionando.
O erro que continuo recebendo é:
Não foi possível encontrar um @SpringBootConfiguration, você precisa usar @ContextConfiguration ou @SpringBootTest (classes = ...) com seu teste java.lang.IllegalStateException
O Spring Boot não se configura?
Minha classe de teste:
@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class JpaTest {
@Autowired
private AccountRepository repository;
@After
public void clearDb(){
repository.deleteAll();
}
@Test
public void createAccount(){
long id = 12;
Account u = new Account(id,"Tim Viz");
repository.save(u);
assertEquals(repository.findOne(id),u);
}
@Test
public void findAccountByUsername(){
long id = 12;
String username = "Tim Viz";
Account u = new Account(id,username);
repository.save(u);
assertEquals(repository.findByUsername(username),u);
}
O iniciador do aplicativo My Spring Boot:
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"domain.repositories"})
@ComponentScan(basePackages = {"controllers","domain"})
@EnableWebMvc
@PropertySources(value {@PropertySource("classpath:application.properties")})
@EntityScan(basePackages={"domain"})
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
}
Meu Repositório:
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
fonte
Application
está. Se, no entanto, você quer dizer comsrc/main
esrc/test
, essas pastas não fazem parte do pacote hierarquia. Talvez você esteja melhor atualizando sua pergunta com uma captura de tela ou uma explicação de como é a estrutura do seu projeto.A configuração está anexada à classe do aplicativo, portanto, o seguinte definirá tudo corretamente:
Exemplo do projeto JHipster aqui .
fonte
Vale a pena verificar se você anotou o nome do pacote refatorado da sua classe principal
@SpringBootApplication
. Nesse caso, o testcase deve estar em um pacote apropriado, caso contrário, ele estará procurando no pacote mais antigo. esse foi o meu caso.fonte
Além do que Thomas Kåsene disse, você também pode adicionar
à anotação de teste para especificar onde deve procurar a outra classe se você não deseja refatorar sua hierarquia de arquivos. É para isso que a mensagem de erro sugere dizendo:
fonte
No meu caso, os pacotes eram diferentes entre as classes Application e Test
e
Depois de fazê-los concordar, os testes foram executados corretamente.
fonte
Funciona para mim
o nome do pacote da classe de teste acima é alterado para o mesmo que o nome do pacote da classe normal.
mude para isso
fonte
A fatia de teste fornecida no Spring Boot 1.4 trouxe o recurso teste orientados a recursos.
Por exemplo,
@JsonTest fornece um ambiente Jackson simples para testar a serialização e desserialização do json.
O @WebMvcTest fornece um ambiente web simulado, pode especificar a classe do controlador para teste e injetar o MockMvc no teste.
@DataJpaTest prepara um banco de dados incorporado e fornece um ambiente JPA básico para o teste.
@RestClientTest fornece o ambiente do cliente REST para o teste, especialmente o RestTemplateBuilder etc.
Essas anotações não são compostas com SpringBootTest, elas são combinadas com uma série de
AutoconfigureXXX
e um@TypeExcludesFilter
anotações.Dê uma olhada
@DataJpaTest
.Você pode adicionar sua anotação @AutoconfigureXXX para substituir a configuração padrão.
Vamos dar uma olhada no seu problema,
@DataJpaTest
e@SpringBootTest
, como dito acima@DataJpaTest
, construirá a configuração de seu próprio modo (por exemplo, por padrão, ele tentará preparar um H2 incorporado) a partir da herança de configuração do aplicativo.@DataJpaTest
é designado para fatia de teste .@DataJpaTest
, leia esta entrada oficial do blog da Spring.io para este tópico (um pouco tedioso).Application
menores por recursos, comoWebConfig
,DataJpaConfig
etc. Uma configuração completa (web mista, dados, segurança etc.) também causou falhas nos testes com base na fatia de teste . Verifique as amostras de teste na minha amostra .fonte
Eu acho que a melhor solução para esse problema é alinhar a estrutura de pastas de testes com a estrutura de pastas do aplicativo.
Eu tive o mesmo problema causado pela duplicação do meu projeto de um projeto de estrutura de pastas diferente.
se seu projeto de teste e seu projeto de aplicativo tiverem a mesma estrutura, não será necessário adicionar anotações especiais às suas classes de testes e tudo funcionará como está.
fonte
Quando todas as classes estavam no mesmo pacote, as classes de teste estavam funcionando. Assim que mudei todas as classes java para um pacote diferente, para manter a estrutura adequada do projeto, estava recebendo o mesmo erro.
Eu o resolvi fornecendo meu nome de classe principal na classe de teste, como abaixo.
fonte
Eu tive o mesmo problema e resolvi adicionando uma classe vazia anotada
SpringBootApplication
no pacote raiz da pasta src / test / javafonte
No meu caso,
verifique se o seu (
test package
nome )YourApplicationTests
é equivalente ao (main package
nome ).fonte
As anotações acima funcionaram bem para mim. Estou usando a bota primavera com JPA.
fonte