春季启动测试“没有合格的可用豆类”

2022-08-31 20:58:02

我是Spring Boot的新手,但这就是我现在面临的问题:

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

  @Autowired
  private Cluster cluster = null;

  @PostConstruct
  private void migrateCassandra() {
    Database database = new Database(this.cluster, "foo");
    MigrationTask migration = new MigrationTask(database, new MigrationRepository());
    migration.migrate();
  }
}

所以基本上,我正在尝试引导一个弹簧应用程序,然后做一些cassandra迁移。

我还为我的用户模型定义了一个存储库:

// UserRepo.java
public interface UserRepo extends CassandraRepository<User> {
}

现在,我正在尝试使用以下简单测试用例测试我的存储库类:

// UserRepoTest.java
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = Replace.NONE)
@DataJpaTest
public class UserRepoTest {

  @Autowired
  private UserRepo userRepo = null;

  @Autowired
  private TestEntityManager entityManager = null;

  @Test
  public void findOne_whenUserExists_thenReturnUser() {
    String id = UUID.randomUUID().toString();
    User user = new User();
    user.setId(id);
    this.entityManager.persist(user);

    assertEquals(this.userRepo.findOne(user.getId()).getId(), id);
  }

  @Test
  public void findOne_whenUserNotExists_thenReturnNull() {
    assertNull(this.userRepo.findOne(UUID.randomUUID().toString()));
  }
}

我希望测试通过,但相反,我得到了一个错误,说“没有可用的'com.datastax.driver.core.Cluster'类型的合格bean”。看起来弹簧无法自动连接物体,但为什么会这样呢?如何解决此问题?多谢!cluster


答案 1

测试环境需要知道 Bean 的定义位置,因此您必须告诉它位置。

在测试类中,添加注释:@ContextConfiguration

@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = Replace.NONE)
@DataJpaTest
@ContextConfiguration(classes = {YourBeans.class, MoreOfYourBeans.class})
public class UserRepoTest {

  @Autowired
  private UserRepo userRepo = null;

  @Autowired
  private TestEntityManager entityManager = null;

答案 2

推荐