为了账号安全,请及时绑定邮箱和手机立即绑定

用于测试上下文的 Web 应用程序上下文 [...]必须配置模拟软件上下文。

用于测试上下文的 Web 应用程序上下文 [...]必须配置模拟软件上下文。

浮云间 2022-09-21 17:38:37

这是有问题的测试:


import org.junit.jupiter.api.Test;

import org.junit.jupiter.api.extension.ExtendWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit.jupiter.SpringExtension;


@ExtendWith(SpringExtension::class)

@SpringBootTest

class SpringUITestApplicationIT {


    @Test

    fun contextLoads() {

    }


}

当自己执行时,工作完全正常。


但是,当在此测试之后执行它时:


package ch.cypherk.springuitest.ui.vaadin


import org.junit.jupiter.api.AfterEach

import org.junit.jupiter.api.Assertions.*

import org.junit.jupiter.api.BeforeEach

import org.junit.jupiter.api.Test

import org.junit.jupiter.api.extension.ExtendWith

import org.openqa.selenium.chrome.ChromeDriver

import org.springframework.boot.test.context.SpringBootTest

import org.springframework.test.context.junit.jupiter.SpringExtension


import com.codeborne.selenide.Selenide

import com.codeborne.selenide.Selenide.`$` as S

import com.codeborne.selenide.Selenide.`$$` as SS

import com.codeborne.selenide.Selenide.*;

import com.codeborne.selenide.Condition.*

import com.codeborne.selenide.Selectors.*


@ExtendWith(SpringExtension::class)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)

internal class BasicUITestIT{


    @BeforeEach

    fun setup(){

    }


    @Test

    fun canOpenIndexPage(){

        Selenide.open("/")

        S(byText("click")).shouldBe(visible)

    }


}

(成功),它失败与


java.lang.非法状态异常:用于测试上下文的 Web 应用程序上下文 [...] 必须使用模拟副本上下文进行配置。


为什么它会这样做,我该如何避免它?


查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1490条经验 获得超7个赞

使用 注释失败的测试


@WebAppConfiguration

@ContextConfiguration

似乎解决了这个问题,虽然我还不确定为什么


import org.junit.jupiter.api.Test;

import org.junit.jupiter.api.extension.ExtendWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit.jupiter.SpringExtension;


@SpringBootTest

@WebAppConfiguration

@ContextConfiguration

class SpringUITestApplicationIT {


    @Test

    fun contextLoads() {

    }


}


查看完整回答
反对 回复 2022-09-21
?
牛魔王的故事

TA贡献1505条经验 获得超3个赞

您可以使用注释添加到类中。它阻止 Spring 缓存上下文。最终,就性能而言,这不是一个完美的解决方案,但在我的情况下,它解决了问题。@DirtiesContext@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)



查看完整回答
反对 回复 2022-09-21
?
冉冉说

TA贡献1534条经验 获得超1个赞

我有同样的问题,似乎也可以通过用SpringBootTest.WebEnvironment.RANDOM_PORT替换SpringBootTest.WebEnvironment.DEFINED_PORT来解决 还不知道为什么...


查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信