如何用间谍替换现有的bean



我使用Mockito测试复制库,在测试中我模拟DAO。然而,该库的构建方式是扫描所有可用的DAO,因此我得到了多个bean(模拟的一个,而不是模拟的一)。

我正在创建一个像这样的间谍豆:

@Bean
@Primary
@Autowired
public DAOBean daoBean (DAOBean dao){
return Mockito.spy(dao);
}

我想知道是否有可能以某种方式放置我的模拟豆而不是现有的,而不仅仅是创建一个新的

pom.xml:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.7.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>2.0.2-beta</version>
<scope>test</scope>
</dependency>

如果您想确保在测试期间没有创建原始bean,您可以

  1. 使用Spring配置文件运行测试,例如使用@ActiveProfiles("test")test
  2. @Profile("!test")注释原始bean

您应该在测试类中使用@MockBean

MockBean注释位于spring-boot-testmaven工件中。

您需要将spring-boot-starter-testspring-boot-test添加到pom.xml才能使用MockBean

参考:MockBean

我不确定为什么要在构造函数中模拟DAO。

通常情况下,情况正好相反——您可以通过提供DAO作为spy()-方法的参数来实例化真实对象的Spy。

class DAOTest {
@Test
void givenDao_whenDoingSomething_thenOk() {
DAOBean testBean = Mockito.spy(new DAOBean());
// ... assertions ...
}
}

相关内容

  • 没有找到相关文章

最新更新