gpt4 book ai didi

java - 找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration 或@SpringBootTest(classes=...)

转载 作者:搜寻专家 更新时间:2023-10-31 20:08:44 25 4
gpt4 key购买 nike

我正在使用 Spring Data JPASpring Boot。应用的布局是这样的

main
+-- java
+-- com/lapots/game/monolith
+-- repository/relational
+--RelationalPlayerRepository.java
+-- web
+--GrandJourneyMonolithApplication.java
+-- config
+-- RelationalDBConfiguration.java
test
+-- java
+-- com/lapots/game/monolith
+-- repository/relational
+-- RelationalPlayerRepositoryTests.java
+-- web
+-- GrandJourneyMonolithApplicationTests.java

我的对象的存储库如下所示

public interface RelationalPlayerRepository extends JpaRepository<Player, Long> {
}

此外,我还为存储库提供了配置

@Configuration
@EnableJpaRepositories(basePackages = "com.lapots.game.monolith.repository.relational")
@EntityScan("com.lapots.game.monolith.domain")
public class RelationalDBConfiguration {
}

我的主应用程序是这样的

@SpringBootApplication
@ComponentScan("com.lapots.game.monolith")
public class GrandJourneyMonolithApplication {

@Autowired
private RelationalPlayerRepository relationalPlayerRepository;

public static void main(String[] args) {
SpringApplication.run(GrandJourneyMonolithApplication.class, args);
}

@Bean
public CommandLineRunner initPlayers() {
return (args) -> {
Player p = new Player();
p.setLevel(10);
p.setName("Master1909");
p.setClazz("warrior");

relationalPlayerRepository.save(p);
};
}
}

应用程序测试看起来像这样

@RunWith(SpringRunner.class)
@SpringBootTest
public class GrandJourneyMonolithApplicationTests {

@Test
public void contextLoads() {
}

}

存储库的测试看起来像这样

@RunWith(SpringRunner.class)
@DataJpaTest
public class RelationalPlayerRepositoryTests {

@Autowired
private TestEntityManager entityManager;

@Autowired
private RelationalPlayerRepository repository;

@Test
public void testBasic() {
Player expected = createPlayer("Master12", "warrior", 10);
this.entityManager.persist(expected);
List<Player> players = repository.findAll();
assertThat(repository.findAll()).isNotEmpty();
assertEquals(expected, players.get(0));
}

private Player createPlayer(String name, String clazz, int level) {
Player p = new Player();
p.setId(1L);
p.setName(name);
p.setClazz(clazz);
p.setLevel(level);
return p;
}
}

但是当我尝试运行测试时出现错误

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.041 sec <<< FAILURE! - in com.lapots.game.monolith.repository.relational.RelationalPlayerRepositoryTests
initializationError(com.lapots.game.monolith.repository.relational.RelationalPlayerRepositoryTests) Time elapsed: 0.006 sec <<< ERROR!
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
at org.springframework.util.Assert.state(Assert.java:70)
at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.getOrFindConfigurationClasses(SpringBootTestContextBootstrapper.java:202)
at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.processMergedContextConfiguration(SpringBootTestContextBootstrapper.java:137)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:409)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildDefaultMergedContextConfiguration(AbstractTestContextBootstrapper.java:323)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:277)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.java:112)
at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.buildTestContext(SpringBootTestContextBootstrapper.java:82)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:105)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:152)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:143)
at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

问题是什么?域 Player 看起来像这样

@Data
@Entity
@Table(schema = "app", name = "players")
public class Player {
@Id
@GeneratedValue
private Long id;

@Transient
Set<Player> comrades;

@Column(unique = true)
private String name;

private int level;

@Column(name = "class")
private String clazz;
}

最佳答案

src/test/java 包和 src/main/java 包应该匹配。我有同样的问题

  • 我的 src/main/java 包以 com.comp.example 开头,但是
  • src/test/java 包以 com.sample.example
  • 开头

因为这个 spring boot 应用程序无法获取应用程序的配置,它从 @SpringBootApplication 类中获取。所以测试用例应该和src/main/java中的@SpringBootApplication写在同一个包下。

关于java - 找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration 或@SpringBootTest(classes=...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47487609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com