Я новичок в фреймворках (только что прошел класс), и я впервые использую Spring Boot.
Я пытаюсь запустить простой тест Junit, чтобы проверить, действительно ли работают мои CrudRepositories.
Ошибка, которую я продолжаю получать:
Не удается найти @SpringBootConfiguration, вам нужно использовать @ContextConfiguration или @SpringBootTest (classes = ...) с тестом java.lang.IllegalStateException
Spring Boot не настраивается сам?
Мой тестовый класс:
@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);
}
Мой стартер приложения 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);
}
}
Мой репозиторий:
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
источник
Application
находится. Если, однако, вы имеете в видуsrc/main
иsrc/test
, то эти папки не являются частью пакета иерархия. Возможно, вам лучше просто обновить вопрос с помощью скриншота или объяснения структуры вашего проекта.Конфигурация привязана к классу приложения, поэтому следующее все настроит правильно:
Пример из проекта JHipster здесь .
источник
Стоит проверить, не поменяли ли вы имя пакета вашего основного класса с пометкой
@SpringBootApplication
. В этом случае тестовый набор должен быть в соответствующей упаковке, в противном случае он будет искать его в старом пакете. это был случай для меня.источник
В дополнение к тому, что сказал Томас Козене, вы также можете добавить
к аннотации теста, чтобы указать, где он должен искать другой класс, если вы не хотите реорганизовывать файловую иерархию. Это то, на что намекает сообщение об ошибке, говоря:
источник
В моем случае пакеты были разными для классов Application и Test.
и
После того, как они согласились, тесты прошли правильно.
источник
Это работает для меня
имя пакета вышеупомянутого тестового класса изменяется на то же самое, что и имя пакета обычного класса.
изменить на это
источник
Тест срез при условии , весной ботинке 1.4 принесла особенность ориентированные возможности тестирования.
Например,
@JsonTest предоставляет простую среду Джексона для тестирования сериализации и десериализации json.
@WebMvcTest предоставляет фиктивную веб-среду, он может указать класс контроллера для тестирования и внедрить MockMvc в тест.
@DataJpaTest подготовит встроенную базу данных и предоставит базовую среду JPA для теста.
@RestClientTest предоставляет клиентскую среду REST для теста, особенно RestTemplateBuilder и т. Д.
Эти аннотации не состоят из SpringBootTest, они объединены с серией
AutoconfigureXXX
и@TypeExcludesFilter
аннотациями.Посмотрите на
@DataJpaTest
.Вы можете добавить аннотацию @AutoconfigureXXX, чтобы переопределить конфигурацию по умолчанию.
Давайте посмотрим на вашу проблему,
@DataJpaTest
и@SpringBootTest
, как сказано выше@DataJpaTest
, создадите конфигурацию по-своему (например, по умолчанию, вместо этого он попытается подготовить встроенную H2) из наследования конфигурации приложения.@DataJpaTest
предназначен для тестового среза .@DataJpaTest
, прочтите эту официальную запись в блоге Spring.io по этой теме (немного утомительно).Application
на более мелкие конфигурации по таким функциям, как, напримерWebConfig
,DataJpaConfig
и т. Д. Полнофункциональная конфигурация (смешанная сеть, данные, безопасность и т. Д.) Также привела к сбою тестов на основе тестового среза . Проверьте тестовые образцы в моем образце .источник
Я думаю, что лучшее решение этой проблемы - выровнять структуру папок тестов со структурой папок приложения.
У меня была та же проблема, которая была вызвана дублированием моего проекта из проекта с другой структурой папок.
если ваш тестовый проект и проект приложения будут иметь одинаковую структуру, вам не потребуется добавлять какие-либо специальные аннотации к вашим тестовым классам, и все будет работать как есть.
источник
Когда все классы были в одном пакете, тестовые классы работали. Как только я переместил все Java-классы в другой пакет для поддержания правильной структуры проекта, я получил ту же ошибку.
Я решил это, указав имя моего основного класса в тестовом классе, как показано ниже.
источник
У меня была та же проблема, и я решил, добавив пустой класс, помеченный
SpringBootApplication
в корневой пакет папки src / test / javaисточник
В моем случае
убедитесь, что ваше (
test package
имя )YourApplicationTests
эквивалентно (main package
имя ).источник
Выше аннотации работали хорошо для меня. Я использую весеннюю загрузку с JPA.
источник