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

如何在测试中重写单个应用程序属性

柳修平
2023-03-14

我有一个测试:

@ExtendWith(SpringExtension.class)
@WebMvcTest(AuthController.class)
@TestPropertySource("classpath:application.properties")
class AuthControllerTest {

    @Autowired
    private MockMvc mvc;

    @Autowired
    AuthTokenFilter authTokenFilter;

    @MockBean
    AuthEntryPointJwt authEntryPointJwt;

    @MockBean
    JwtUtils jwtUtils;

    @Autowired
    private ObjectMapper objectMapper;

    @MockBean
    UserDetailsServiceImpl userDetailsServiceImpl;

    @MockBean
    AuthenticationManager authenticationManager;

    @MockBean
    Authentication authentication;

    @MockBean
    SecurityContext securityContext;

    @Test
    void test1withEnabledTrue() {
    }

    @Test
    void test2WithEnabledTrue() {
    }

    @Test
    void cannotRegisterUserWhenRegistrationsAreDisabled() throws Exception {
        
        var userToSave = validUserEntity("username", "password");
        var savedUser = validUserEntity("username", "a1.b2.c3");

        when(userDetailsServiceImpl.post(userToSave)).thenReturn(savedUser);

        mvc.perform(post("/api/v1/auth/register/").contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsBytes(userToSave))).andExpect(status().isCreated())
        .andExpect(jsonPath("$.status", is("registrations are disabled")));
    }

    private static UsersEntity validUserEntity(String username, String password) {
        return UsersEntity.builder().username(username).password(password).build();
    }

}

这是控制器(测试类)中的相关部分:

@Value("${app.enableRegistration}")
private Boolean enableRegistration;

private Boolean getEnableRegistration() {
    return this.enableRegistration;
}

@PostMapping("/register")
@ResponseStatus(HttpStatus.CREATED)
public Map<String, String> post(@RequestBody UsersDTO usersDTO) {

    Map<String, String> map = new LinkedHashMap<>();

    if (getEnableRegistration()) {
        [...]
        map.put("status", "ok - new user created");
        return map;
    }
    map.put("status", "registrations are disabled");
    return map;

}

我有一个应用程序。属性src/test/resources下,我需要覆盖它,仅针对名为CannotRegisterUsers的单个测试,当注册被禁用时

app.enableRegistration=true

也许我可以使用另一个文件“application.properties”和另一个类测试,但我正在寻找一个更智能的解决方案

共有2个答案

单淳
2023-03-14

我想你要找的是@TestProperty注释,它是Stackoverflow上一个问题的答案。然而,这只适用于类级别,而不是仅仅针对一个测试。

您可能需要创建一个新的测试类,并在值需要为false的地方添加测试。

鞠边浩
2023-03-14

只需配置@TestPropertySource的内联属性,其优先级高于从位置加载的属性/

@WebMvcTest(AuthController.class)
@TestPropertySource(locations = "classpath:application.properties" ,properties="app.enableRegistration=true" )
class AuthControllerTest {


}

属性中指定的所有内联属性将覆盖应用程序中指定的属性。属性

 类似资料:
  • 考虑以下示例: 我正在使用注释的属性为这个测试套件中的所有测试设置属性的值。现在,我想为其中一个测试(例如)设置该属性的另一个值,而不影响其他测试。我怎样才能做到这一点?我已经阅读了Spring Boot docs中的“测试”一章,但是我还没有找到任何与我的用例匹配的东西。

  • 我有一个spring引导应用程序,其中默认属性设置在类路径(src/main/resources/application.properties)中的文件中。 我想用文件(src/test/resources/test.properties)中声明的属性重写JUnit测试中的一些默认设置 我通常有一个专用的配置类用于我的Junit测试,例如。 我首先认为在TestConfig类中使用就可以完成任务,

  • 本章讨论使用 JUnit,Mockito,MRUnit 和 HBaseTestingUtility 对 HBase 应用程序进行单元测试。大部分信息来自关于测试 HBase 应用程序的社区博客文章。有关 HBase 本身的单元测试的信息,请参阅 hbase.tests 。 175. JUnit HBase 使用 JUnit 进行单元测试 此示例将单元测试添加到以下示例类: public class

  • 我尝试在intellij中的play framework java starter示例上运行单元测试,但似乎不起作用。 我下载了该项目,并通过SBT导入将其导入到intellij中。 当我尝试从intellij运行测试时,我得到了“未找到类:”UnitTest“空测试套件” 编辑(在重新定位到@HCE) 我将intellij升级到最新版本:2018.3.2(找不到2018.3.5),但我仍然遇到类

  • 概要文件对于我所需要的似乎有点过分了,我不确定这是否可以通过主注释来实现,因为不同的单元测试可能有不同的模拟。