gpt4 book ai didi

java - spring boot @value变量的JUnit测试

转载 作者:行者123 更新时间:2023-12-05 02:07:15 25 4
gpt4 key购买 nike

我正在尝试为在“if”中测试 2 个值的方法实现单元测试。我怎样才能做到这一点 ?

对于 valService.validate 部分,我调用了 when.thenReturn 并且它工作正常,但是对于 equals 部分,我的测试无法变为绿色,当我调试时我发现它没有通过第一部分如果那个 userTypeSpecific 有一个 null 值。

编辑:我从我的 app.properties 中获取带有 @value 的 userTypeSpecific 变量

我的 Controller

@Value("${app.usertype.specific}")
String userTypeSpecific;

@PostMapping(value = "decline")
@ResponseBody
public ResponseEntity<Boolean> declineUser(@RequestParam final String idUser, @RequestHeader("userType") String userType) {
HttpStatus httpStatus = HttpStatus.FORBIDDEN;
Boolean result = false;

if (userTypeSpecific.equals(userType) && valService.validate(idUser, userType)) {
result = this.service.declineUser(idUser);
if (result){
httpStatus = HttpStatus.OK;
}
}
return ResponseEntity.status(httpStatus).body(result);
}

这是我的测试代码:

@SpringBootTest
@ExtendWith(SpringExtension.class)
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(properties = {"app.usertype.specific=spec",})
public class UserControllerTest {
@Mock
IUserService service;

@Value("${app.usertype.specific}")
String userType;

@Mock
IValService valservice;

@InjectMocks
UserController controller;

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}

@Configuration
static class Config {
@Bean
public static PropertySourcesPlaceholderConfigurer propertiesResolver() {
return new PropertySourcesPlaceholderConfigurer();
}
}

@Test
public void testDeclineUser() {
String idUser= "123";

Assert.assertEquals("TEST userType", "gae", userType);
when(valservice.validate(any(),any())).thenReturn(Boolean.TRUE);
when(service.declineUser(idUser)).thenReturn(true);

ResponseEntity<Boolean> resultStatus = controller.declineUser(idUser, userType);

verify(this.service,times(1)).declinePieceJustif(numeroDemande);
Assert.assertEquals("HTTP status test, HttpStatus.OK, resultStatus.getStatusCode());
Assert.assertEquals ("Boolean status test", true, resultStatus.getBody());
}



}

最佳答案

我在@Before 方法中找到了使用 ReflectionTestUtils.setField 的方法:

 @Before
public void setUp() {
MockitoAnnotations.initMocks(this);
String userTypeSpecific ="spec";
ReflectionTestUtils.setField(controller, "userTypeSpecific", userTypeSpecific);
}

关于java - spring boot @value变量的JUnit测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61959308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com