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

这是有问题的测试:


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 应用程序上下文 [...] 必须使用模拟副本上下文进行配置。


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


浮云间
浏览 114回答 3
3回答

斯蒂芬大帝

使用 注释失败的测试@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@ContextConfigurationclass SpringUITestApplicationIT {    @Test    fun contextLoads() {    }}

牛魔王的故事

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

冉冉说

我有同样的问题,似乎也可以通过用SpringBootTest.WebEnvironment.RANDOM_PORT替换SpringBootTest.WebEnvironment.DEFINED_PORT来解决 还不知道为什么...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java