如何用间谍替换现有的 bean
How to replace existing bean with a spy
我正在使用 Mockito 来测试复制库,在测试中我正在模拟 DAO。但是,该库的构建方式是扫描所有可用的 DAO,因此我得到了多个 bean(模拟一个而不是模拟一个)。
我正在创建一个这样的 bean 间谍:
@Bean
@Primary
@Autowired
public DAOBean daoBean (DAOBean dao){
return Mockito.spy(dao);
}
我想知道是否有可能以某种方式放置我的模拟 bean 而不是现有的 bean 而不仅仅是创建一个新的 bean
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>
您应该在测试中使用 @MockBean
class。
MockBean
注释位于 spring-boot-test
maven 工件中。
您需要将 spring-boot-starter-test
或 spring-boot-test
添加到您的 pom.xml
才能使用 MockBean
.
参考:MockBean
我不确定你为什么要在你的构造函数中模拟你的 DAO。
通常,情况正好相反——您可以通过提供您的 DAO 作为 spy()
-方法的参数来实例化您的真实对象的 Spy。
class DAOTest {
@Test
void givenDao_whenDoingSomething_thenOk() {
DAOBean testBean = Mockito.spy(new DAOBean());
// ... assertions ...
}
}
如果您想确保原始 bean 不是在测试期间创建的,您可以
- 运行 使用 Spring 配置文件进行测试,例如
test
使用 @ActiveProfiles("test")
- 用
@Profile("!test")
注释原始bean
我正在使用 Mockito 来测试复制库,在测试中我正在模拟 DAO。但是,该库的构建方式是扫描所有可用的 DAO,因此我得到了多个 bean(模拟一个而不是模拟一个)。
我正在创建一个这样的 bean 间谍:
@Bean
@Primary
@Autowired
public DAOBean daoBean (DAOBean dao){
return Mockito.spy(dao);
}
我想知道是否有可能以某种方式放置我的模拟 bean 而不是现有的 bean 而不仅仅是创建一个新的 bean
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>
您应该在测试中使用 @MockBean
class。
MockBean
注释位于 spring-boot-test
maven 工件中。
您需要将 spring-boot-starter-test
或 spring-boot-test
添加到您的 pom.xml
才能使用 MockBean
.
参考:MockBean
我不确定你为什么要在你的构造函数中模拟你的 DAO。
通常,情况正好相反——您可以通过提供您的 DAO 作为 spy()
-方法的参数来实例化您的真实对象的 Spy。
class DAOTest {
@Test
void givenDao_whenDoingSomething_thenOk() {
DAOBean testBean = Mockito.spy(new DAOBean());
// ... assertions ...
}
}
如果您想确保原始 bean 不是在测试期间创建的,您可以
- 运行 使用 Spring 配置文件进行测试,例如
test
使用@ActiveProfiles("test")
- 用
@Profile("!test")
注释原始bean