Spring Security @WithMockUser不适用于黄瓜测试

Gau*_*wat 6 java spring spring-security

我正在使用黄瓜测试来测试我的弹簧启动应用程序启用了弹簧安全性.除了我运行我的测试套件黄瓜测试使用弹簧安全性的一些测试时,工作正常.

    @WithMockUser(username = "BROWSER", roles =
   {"BROWSER","ADMIN"})
Run Code Online (Sandbox Code Playgroud)

如果我将它们作为简单的junit测试以隔离方式运行,但在运行黄瓜测试步骤时失败,则这些测试确实有效.问题看起来像春天安全测试模拟行为在我用黄瓜测试运行时不会被应用.

我的黄瓜试运行班如下

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources", monochrome = true, format =
{"pretty", "html:src/main/resources/static/cucumber"})
public class CucumberTests
{

}
Run Code Online (Sandbox Code Playgroud)

此外,我注意到通过Maven运行时的相同工作 <reuseForks>false</reuseForks>.如果未选中此选项,则maven触发的测试用例运行也会失败.

UPDATE

AbstractIntegrationTest类所有测试都扩展

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Services.class,loader = SpringApplicationContextLoader.class)
//@IntegrationTest
@WebIntegrationTest(randomPort = true)
public abstract class AbstractIntegrationTest {
Run Code Online (Sandbox Code Playgroud)

另一个不起作用的用例是使用这些注释是如下的黄瓜特征条件

@When("^I apply a GET on (.*)$")
    @WithMockUser(username = "BROWSER", roles = { "BROWSER", "ADMIN" })
    public void i_search_with_rsql(String query) throws Throwable {
    result = mvc.perform(get(uri, query));
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助或解决方法.

Rob*_*nch 1

根据您的意见,您需要确保应用 Spring Security。您可以在参考文档的设置 MockMvc 和 Spring Security 部分找到这样的示例:

import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;

// ...

@Before
public void setup() {
    mvc = MockMvcBuilders
            .webAppContextSetup(context)
            .apply(springSecurity()) // ADD THIS!
            .build();
}
Run Code Online (Sandbox Code Playgroud)