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

Spring安全测试@WithMockUser不工作

姬正文
2023-03-14

我正在为我的应用程序编写单元测试,我在服务内部执行的步骤之一是从SpringSecurityContext获取当前经过身份验证的用户。

我知道,如果我想模拟Spring Security Authentication,我可以使用@SusMockUser,但它对我不起作用,因为当测试方法到达getAuthentication()方法调用时,它总是返回null...

我已经搜索了很多问题和博客帖子,但没有一个有解决方案。我用@ExtendWith(MockitoExtension.class)注释我的测试类

我希望避免编写4行代码来模拟单个方法调用

//mock身份验证
//mock主体
//当SpringContextHolder.getContext(). getAuthentication-

编辑:

测试类

@ExtendWith(MockitoExtension.class)
public class SegmetnServiceTest {
    
    @InjectMocks
    private SegmentService service;


    @Test
    void testWithMockUser() {
            //given
            UpdateSegmentReq request = new UpdateSegmentReq();
            String name = "TEST"
            request.setName(name)

            //when
            SegmentNode segment = service.updateSegment(request);

            //then
            assertEquals(segment.getName(), name)
    }
}

服务等级

public class SegmentService {

    private SegmentRepository repository;

    SegmentNode updateSegment(String code){
        SegmentNode segment = repository.findByCode(code);

        String userId = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        segment.updatedBy(userId);


        return segment;
    }
}

问题是,即使我用@SusMockUser注释我的Test方法,当它到达服务方法getAuthentication为空并且getMain抛出NPE。

共有1个答案

端木冷勋
2023-03-14

您应该使用@ContextConfiguration将Spring Security测试配置加载到Application Context中(假设您还具有spring-test作为依赖项)请参阅澄清。

您可以使用注释SpringJUnitConfig来组合所需的注释--@ExtendWith(SpringExtension.class)@ContextConfiguration--在测试中设置spring测试。

 类似资料:
  • 尽管我的测试方法被@WithMockUser注释,但我仍然被拒绝访问。为什么这在集成测试中不起作用?使用@webappconfiguration和mockmvc进行测试一切都很好。

  • 我正在使用cucumber测试来测试我的Spring启动应用程序,启用了Spring安全。除了当我用cucumber测试一些使用Spring安全的测试时,事情运行得很好。 失败。如果我像简单的jUnit测试那样隐蔽地运行它们,这些测试确实有效,但是当使用cucumber测试步骤运行时失败了。当我用cucumber测试运行同样的测试时,这个问题看起来像是Spring安全测试模拟行为没有被应用。 我的

  • 我已经开始学习OAuth2 spring安全从一个星期,所以对不起,如果问题是容易的。在我开始研究之前,这个话题对我来说似乎很容易。我将在应用程序中为Restendpoint编写测试。为了做到这一点,我将为我的资源类编写测试。但我的应用程序使用的是OAuth2。 第一个想法是配置单独的授权服务器,扩展AuthorizationServerConfigurerAdapter用于此测试。我已经将Cli

  • 有多种工具可用于执行应用程序的安全性测试。很少有工具可以执行端到端安全测试,而有些工具专门用于发现系统中的特定类型的缺陷。 开源工具 一些开源安全测试工具如下 - 编号 工具名称 描述/简介 网站/网址 1 Zed Attack Proxy 提供自动扫描仪和其他工具,以发现安全漏洞。 https://www.owasp.org 2 OWASP WebScarab 使用Java开发,用于分析Http

  • 我有一个带有Java配置类的Spring(4.2.5)项目。这些在正常运行项目时起作用,但我无法使我的测试工作。在下面的测试中,为空。 如果添加注释,则会出现异常 其中和在和中定义,后者是基于活动配置文件选择的。 [编辑2] 经过更多的搜索,我发现了这个问题,并且在检查了我的依赖项之后,我发现我在maven依赖项下有Spring-Core-4.1.9,而且我没有在我的POM中包含一个依赖项。添加依

  • 这是我的安全配置代码: 但在编译spring时,仍在为我生成密码。 我通过print语句检查了配置是否正在加载,发现安全配置正在加载。我是否应该对给定的用户ID和密码进行任何更改。 提前感谢。