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

Spock测试方法中不能加载Spring上下文

章博耘
2023-03-14

嗨,我有一个Spring Boot(2.1.6发行版)应用程序,我正在尝试添加一些简单的集成测试到我的应用程序。首先,我创建了一个基础IntegrationTest类,如下所示:

@TypeChecked
@Transactional
@Rollback
@SpringBootTest(classes = AppRunner.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
abstract class IntegrationTest extends Specification {

    @Autowired
    protected WebApplicationContext webApplicationContext

    @Autowired
    ObjectMapper objectMapper

    MockMvc mockMvc

    @Before
    void setupMockMvc() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                .apply(springSecurity())
                .build()
    }

    protected ResultActions makePost(final String uri, final Object dto) {
        mockMvc.perform(post(uri)
                    .contentType(MediaType.APPLICATION_JSON_UTF8)
                    .content(dtoToJson(dto))
        )
    }

    private String dtoToJson(final Object dto) {
        return objectMapper.writeValueAsString(dto)
    }
}

这是我的测试方法:

class TestForTest extends IntegrationTest {


    @WithMockUser(username = "xxx@gmail.com")
    def "should reset password and send mail with proper activation link"() {
        given:
            def email = "user2@xxx.com"
        when:
            ResultActions result = makePost("/rest/user/resendActivationMail", email)
        then:
            1 == 1
            println(result)
    }
}
at org.springframework.util.Assert.notNull(Assert.java:198)
at org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder.<init>(DefaultMockMvcBuilder.java:52)
at org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup(MockMvcBuilders.java:51)
at pl.isolution.veolia.mveolia.spec.IntegrationTest.setupMockMvc(IntegrationTest.groovy:37)

有什么建议吗?

共有1个答案

皇甫雨石
2023-03-14

好吧,真遗憾:)我错过了一个依赖项。

       <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>1.3-groovy-2.5</version>
            <scope>test</scope>
        </dependency>
 类似资料:
  • 我想用Mock测试方法,没有spring上下文。我该怎么做?现在,变量返回null。我想设置方法的返回值。

  • 我使用Spock框架来运行我的测试。每个测试类上都有Spring的注释。正如我所看到的,每个测试类都需要上下文,在不同的类中运行几十个测试需要很多时间。是否有一种方法可以配置Spock测试类以在公共spring上下文下运行?

  • 我在我的src/test/resources路径中创建了一个application-integrationtest.yaml,所以我的测试是针对创建的docker TestContainer运行的。问题是没有加载我的application-integrationtest.yaml。 我正在运行一个SpringBoot2.x应用程序 原因:org.springframework.beans.Bean

  • 问题内容: 我需要在测试类的单个方法中更改applicationContext中活动的Spring概要文件,并且由于我使用的是ProfileResolver,因此在刷新竞赛之前,我需要运行一行代码。我尝试了以下方法: 但是我得到: DirtiesContext对我不起作用,因为它是在类/方法执行之后而不是之前运行的,并且无论如何我都需要在运行刷新/重新加载之前执行一行代码。 有什么建议?我试图查看

  • 在我的一个集成测试中,我似乎遇到了一个棘手的问题。我有一个基于Spring Boot/Spring MVC的REST服务器和一个Cassandra DB。我使用spring数据cassandra jar文件,通过一个CrudRepository实现,通过CassandraTemplate将POJO插入到DB中。应用程序运行良好,我可以进行REST调用,框架可以将我的表单数据正确地转换为POJO,并

  • 我们有一个基于Spring的JUnit测试类,它利用一个内部测试上下文配置类 最近,服务类中引入了新的功能,相关测试应添加到ServiceTest中。但是,这也需要创建不同的测试上下文配置类(现有配置类的内部结构相当复杂,如果可能的话,将其更改为既服务于旧测试又服务于新测试似乎非常困难) 有没有一种方法可以实现一个测试类中的某些测试方法将使用一个配置类,而其他方法将使用另一个?似乎只适用于类级别,