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

使用Spring Boot和安全性进行集成测试

勾炜
2023-03-14

我们有一个Spring应用程序,使用Gradle构建,使用Spring Boot 1.2.5运行。释放。我们编写了一些初始集成测试,使用Rest-Assured对Restendpoint进行测试。这起到了作用,我们的应用程序的RESTendpoint通过浏览器和Postman进行了适当的响应。

然后我们使用Spring Security实现了一个OncePerRequest estFilter和我们自己的身份验证提供程序。我们的身份验证工作正常,浏览器和邮递员仍然收到适当的响应,但是我们的集成测试不再工作。

逐步通过测试,我们确实看到我们的Controllerendpoint被调用并返回正确的输出,但超出这一点,我们收到错误(空堆栈跟踪)的org.springframework.web.util.NestedServletException:处理程序处理失败;嵌套异常java.lang.AbstractmetodError

我们通过使用Spring Security初始化集成测试取得了进展,我们尝试放弃了Rest-Assured,只使用MockMvc,我们尝试返回到Rest-Assured并使用MockMvc初始化。目前没有运气。

下面是我们的初始化代码,注释掉的部分可以放心,当前的实现直接使用MockMvc。

任何帮助将不胜感激!

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = IamExtensionApplication.class)
@WebIntegrationTest
public class OurIntegrationTest {
private MockMvc mockMvc;

@Autowired
private WebApplicationContext webApplicationContext;

//    @Autowired
//    private FilterChainProxy filterChainProxy;


@Before
public void setUp() {
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).
            apply(springSecurity()).
//                addFilters(filterChainProxy).
            build();

//        RestAssuredMockMvc.mockMvc(mockMvc);
}

@Test
public void our_test() {
    try {
        ResultActions resp = amockMvc.perform(post("/our/endpoint").param("test", "test_value"));
    } catch (Exception e) {
        e.printStackTrace();
    }
//        MockMvcResponse resp = given()
//                .param("test", "test_value")
//                .when()
//                .post("/our/endpoint");
}

共有1个答案

皇甫高阳
2023-03-14

我们尝试了这些配置的几种变体,但我们最终尝试了一种有效的配置(实际上我们在任何地方都没有找到文档),那就是将我们的filterChainProxy作为参数传递给springSecurity()函数。

希望这对其他人有帮助!

 类似资料:
  • 我有几个繁重的Spring集成测试(是的,这不是最好的方法,我没有时间正确地模拟所有外部dep) 下面是测试的典型注释 由于以下原因,测试会定期失败: 这里有两个问题:1、让测试共存的正确方式是什么?我在surefire插件中设置了forkCount=0。好像有帮助 2.1. 在每次测试期间,我实际上不需要启动所有的

  • 我尝试编写一个联调的Spring Data Elastisearch存储库在SpringBoot使用测试容器和junit5 org . spring framework . beans . factory . unsatisfieddependencyexception:创建名为“com . example . demo . addressrepositorytest”的bean时出错:通过字段“

  • 使用Spock运行集成测试(例如)的最佳方式是什么?我想引导整个Spring Boot应用程序,并执行一些HTTP调用来测试整个功能。 我可以用JUnit(首先运行应用程序,然后执行测试): 但是有了Spock,应用程序就不会启动了:

  • 我正在尝试将Spring Boot应用程序的一些集成测试从迁移到。目前,测试使用的是 当测试运行时,被配置为使用与服务器运行时相同的基本URL和(随机选择的)端口。 在我的一个测试中,我登录并保存authorization-response头值,以便在后续的API调用中使用。我试着将它迁移到,就像这样 但是当我像这样创建实例时,它没有配置为使用与应用程序相同的端口。 我尝试使用的依赖注入实例 这确

  • Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6

  • 问题内容: 我还不清楚如何最好地使用Maven Failsafe插件进行集成测试。我的用例是针对本地MySQL数据库测试SQL查询。 我了解应该在该阶段启动数据库,而在期间关闭数据库。但是我该如何指定呢?我应该在pom.xml中放入命令行吗?还是我应该使用特定注释进行注释的方法? 问题答案: 在常规的内置Maven生命周期(jar,war …)中,和测试阶段未绑定到任何maven插件(即,这些阶段