如何使用 @WithMockUser 并从我的属性文件中传递我的用户名和密码?

Posted

技术标签:

【中文标题】如何使用 @WithMockUser 并从我的属性文件中传递我的用户名和密码?【英文标题】:How can I use @WithMockUser and pass my username and password from my properties file? 【发布时间】:2019-08-31 01:36:21 【问题描述】:

我正在编写一个集成测试,其中应用程序具有使用 spring 安全性应用的基本身份验证。我正在使用 @WithMockUser 告诉 mockMVC 如何使用我的端点进行身份验证。

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@WithMockUser(username="username", password="password")

这可行,但我想知道是否可以将这些字符串替换为对我的 application.properties 文件中的值的引用,类似于您可以这样做:

    @Value("$spring.security.user.name")
    private String userName;

以上可以吗?

【问题讨论】:

【参考方案1】:

您只能将常量表达式传递给注解,但另一种方法是创建您自己的安全上下文,如@WithSecurityContext 章节中所述: https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/test-method.html

我还将创建自己的测试属性配置文件,用于从测试中读取属性。

【讨论】:

【参考方案2】:

我最终删除了@WithMockUser 注释,并采用了这个更适合我的用例的解决方案。此方法使用配置的基本身份验证进行身份验证,因此如果要更改它不会有问题。

@RunWith(SpringRunner.class)
@SpringBootTest
public class sampleTestIT 

    @Autowired
    private WebApplicationContext webApplicationContext;

    private MockMvc mockMvc;

    @Before
    public void setUp() throws Exception 
        mockMvc = webAppContextSetup(webApplicationContext).build();
    
    ....


【讨论】:

以上是关于如何使用 @WithMockUser 并从我的属性文件中传递我的用户名和密码?的主要内容,如果未能解决你的问题,请参考以下文章

@WithMockUser 忽略用户名、密码字段?

我可以在 /sdcard 上下载 SQLite 数据库并从我的 Android 应用程序访问它吗?

@WithMockUser 在并行上下文中

@WithMockUser 在集成测试中不起作用 - Spring boot

用于 Selenium 测试的 Spring Security @WithMockUser

在远程服务器上运行基于 opencv 的 python 脚本并从我的 macbook 进行 ssh 转发给我一个错误