java—如何用间谍替换现有bean

t9aqgxwy  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(458)

我使用mockito测试复制库,在测试中我模拟dao。但是,这个库的构造方式是扫描所有可用的dao,因此我得到了多个bean(mocked one和not mocked one)。
我正在创造一个像这样的豆子间谍:

@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>
velaa5lx

velaa5lx1#

如果您想确保原始bean不是在测试期间创建的,您可以
例如,使用Spring配置文件运行测试 test 使用 @ActiveProfiles("test") 注解原始bean @Profile("!test")

kupeojn6

kupeojn62#

你应该使用 @MockBean 在测试课上。 MockBean 注解位于 spring-boot-test maven神器。
你需要加上 spring-boot-starter-test 或者 spring-boot-test 给你的 pom.xml 为了使用 MockBean .
参考:mockbean

jdg4fx2g

jdg4fx2g3#

我不确定你为什么要在构造器中模仿你的dao。
通常情况下,情况正好相反-您可以通过提供dao作为实际对象的参数来示例化实际对象的间谍 spy() -方法。

class DAOTest {

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

相关问题