Spring 引导:禁用 Spring 引导单元测试的安全性
Spring Boot: Disable security for Spring Boot Unit Test
Spring 引导版本:2.0.4.RELEASE
对于下面的 Spring 启动测试,测试 returns 不需要的 401 响应:
“401”状态,"error":"unauthorized"
为测试禁用 Spring 安全性的最佳方法是什么?
我尝试像这样添加配置 "security.basic.enabled=false" 属性:
@SpringBootTest(<br>
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,<br>
classes = TestApp.class,<br>
properties = {
"security.basic.enabled=false"
})
并将此注释添加到 class:
@AutoConfigureMockMvc(secure = false)
但不幸的是测试仍然returns一个“401”未经授权的错误代码。
原测
@RunWith(SpringRunner.class)
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = App.class
)
public class ExampleTest{
@Autowired
public void setup(@LocalServerPort int port) {
RestAssured.port = port;
}
@Test
public voidtestMethod() {
// This test code is not important to my question.
given().log().all().get("/resources").then().log().all().statusCode(HttpURLConnection.HTTP_BAD_REQUEST).body("error", equalTo("invalid_request")).body(not(containsString("error_reason")));
}
}
被单元测试的class很简单:
@SpringBootApplication
@RestController
public class App {
@GetMapping("/resources")
public String[] resources(
@RequestParam("mandatory_param") String mandatory,
@RequestParam("valid_param") @NotNull String validParam) {
return new String[]{"1", "2"};
}
...
}
有谁知道如何为测试禁用 spring 安全性?
谢谢
同时使用带有随机端口的 @SpringBootTest
和 @AutoConfiguration
可能会出现问题。
你能试试吗:
@RunWith(SpringRunner.class)
@WebMvcTest(App.class)
@AutoConfigureMockMvc(secure = false)
public class ExampleTest{}
或
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementSecurityAutoConfiguration.class })
public class ExampleTest{}
您可以添加自定义配置文件(integration_test)并制作:
security:
basic:
enabled: false
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(value="integration_test")
public class ExampleTest{}
更新:刚刚在另一个 SO 问题中找到了类似的答案:
Spring 引导版本:2.0.4.RELEASE
对于下面的 Spring 启动测试,测试 returns 不需要的 401 响应:
“401”状态,"error":"unauthorized"
为测试禁用 Spring 安全性的最佳方法是什么?
我尝试像这样添加配置 "security.basic.enabled=false" 属性:
@SpringBootTest(<br>
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,<br>
classes = TestApp.class,<br>
properties = {
"security.basic.enabled=false"
})
并将此注释添加到 class:
@AutoConfigureMockMvc(secure = false)
但不幸的是测试仍然returns一个“401”未经授权的错误代码。
原测
@RunWith(SpringRunner.class)
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = App.class
)
public class ExampleTest{
@Autowired
public void setup(@LocalServerPort int port) {
RestAssured.port = port;
}
@Test
public voidtestMethod() {
// This test code is not important to my question.
given().log().all().get("/resources").then().log().all().statusCode(HttpURLConnection.HTTP_BAD_REQUEST).body("error", equalTo("invalid_request")).body(not(containsString("error_reason")));
}
}
被单元测试的class很简单:
@SpringBootApplication
@RestController
public class App {
@GetMapping("/resources")
public String[] resources(
@RequestParam("mandatory_param") String mandatory,
@RequestParam("valid_param") @NotNull String validParam) {
return new String[]{"1", "2"};
}
...
}
有谁知道如何为测试禁用 spring 安全性? 谢谢
同时使用带有随机端口的 @SpringBootTest
和 @AutoConfiguration
可能会出现问题。
你能试试吗:
@RunWith(SpringRunner.class)
@WebMvcTest(App.class)
@AutoConfigureMockMvc(secure = false)
public class ExampleTest{}
或
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementSecurityAutoConfiguration.class })
public class ExampleTest{}
您可以添加自定义配置文件(integration_test)并制作:
security:
basic:
enabled: false
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(value="integration_test")
public class ExampleTest{}
更新:刚刚在另一个 SO 问题中找到了类似的答案: