当前位置: 首页 > 知识库问答 >
问题:

Spring boot:在单元测试中使用一个bean覆盖多个bean

马魁
2023-03-14

我的项目中有一些存储-bean。我把这种回购的收集连接到我的一些服务,并从每个服务中迭代地获取数据。但是在我的单元测试中,我希望从Spring上下文中排除所有这些存储库(真正的实现),只使用假的。我如何实现它?

共有1个答案

郤令
2023-03-14

让我们创建一个非常简单的示例来测试我们的自动配置。我们将创建一个名为MyUser的实体类,以及一个使用Spring数据的MyUserRepository接口:

@Entity
public class MyUser {
    @Id
    private String email;

    // standard constructor, getters, setters
}
public interface MyUserRepository 
  extends JpaRepository<MyUser, String> { }

要启用自动配置,我们可以使用@SpringBootApplication@enableAutoConfiguration注释之一:

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

接下来,让我们编写一个保存MyUser实体的JUnit测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(
  classes = AutoconfigurationApplication.class)
@EnableJpaRepositories(
  basePackages = { "com.baeldung.autoconfiguration.example" })
public class AutoconfigurationTest {

    @Autowired
    private MyUserRepository userRepository;

    @Test
    public void whenSaveUser_thenOk() {
        MyUser user = new MyUser("user@email.com");
        userRepository.save(user);
    }
}

我们可以检查应用程序日志,看看是否正在使用MySQL数据源:

web - 2017-04-12 00:01:33,956 [main] INFO  o.s.j.d.DriverManagerDataSource - Loaded JDBC driver: com.mysql.cj.jdbc.Driver

如果我们希望不加载自动配置,我们可以将@enableAutoConfiguration注释和excludeexcludeName属性添加到配置类中:

@Configuration
@EnableAutoConfiguration(
  exclude={MySQLAutoconfiguration.class})
public class AutoconfigurationApplication {
    //...
}

另一个禁用特定自动配置的选项是设置spring.autoconfigure.exclude属性:

spring.autoconfigure.exclude=com.baeldung.autoconfiguration.MySQLAutoconfiguration
 类似资料:
  • 问题内容: 有没有一种简单的方法可以轻松地在特定的单元测试中覆盖自动装配的Bean?编译类中每种类型只有一个bean,因此在这种情况下自动装配不是问题。测试类将包含其他模拟。运行单元测试时,我只想指定一个基本的附加配置,运行该单元测试时,请使用此模拟而不是标准Bean。 概要文件似乎对我的需求有些矫kill过正,而且我不确定使用主要注解是否可以实现,因为不同的单元测试可能具有不同的模拟。 问题答案

  • 我可以在声纳获得单位测试覆盖率通过使用Jacoco工具的代码覆盖率,并使用其报告在声纳属性文件为'sonar.jacoco.report路径=.../Reports/report.exec'。如何通过使用RAD的默认插件获得SONAR中的单元测试覆盖率,该插件以. coveragedata、. Analysis和. html格式生成报告?

  • 我一直试图获得本地单元测试的代码覆盖率,但没有成功。 这里有一个关于我所说的本地单元测试的参考。 https://developer.android.com/training/testing/unit-testing/local-unit-tests.html 但这似乎无济于事。我是不是漏掉了什么? 注意,如果我通过Android Studio运行本地单元测试,一切都很好。我点击了我的“测试”模块

  • 新的一年 之前因为上家公司的经营出了问题,年前的大裁员,过了一个漫长的春节。 之后加入了新公司,然后正好赶上一个很紧急的项目,忙成狗,因此好久没更新文章了。 不过,我又回来啦! 前言 自动化测试,我们将使用karma和nightmare,内容会包括: 单元测试 e2e测试(放下一篇文章) 其实,单元测试一般用在写公共包的时候,比如通用的js函数库,通用的UI组件库。基本不太会在做业务项目的时候还使

  • 为了让单元测试跑一个批处理的任务,这个框架必须加载这个任务的ApplicationContext,两个注解的触发方式: @RunWith(SpringJUnit4ClassRunner.class):表明这个类需要使用Spring的测试工具 @ContextConfiguration(locations = {…}):表明哪些xml文件包含ApplicationContext @RunWith

  • 非常感谢任何帮助。