Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring boot@value变量的JUnit测试_Java_Spring_Spring Boot_Junit_Mockito - Fatal编程技术网

Java spring boot@value变量的JUnit测试

Java spring boot@value变量的JUnit测试,java,spring,spring-boot,junit,mockito,Java,Spring,Spring Boot,Junit,Mockito,我正在尝试为一个方法实现单元测试,该方法在“if”中测试2个值。我该怎么做 对于valService.validate部分,我调用了when.thenReturn,它工作正常,但是对于equals部分,我的测试不能变成绿色,当我调试时,我看到它没有通过if的第一部分,并且userTypeSpecific有一个null值 编辑:我从我的app.properties中获取带有@value的userTypeSpecific变量 我的控制器 @Value("${app.usertype.specific

我正在尝试为一个方法实现单元测试,该方法在“if”中测试2个值。我该怎么做

对于valService.validate部分,我调用了when.thenReturn,它工作正常,但是对于equals部分,我的测试不能变成绿色,当我调试时,我看到它没有通过if的第一部分,并且userTypeSpecific有一个null

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

我的控制器

@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);
}
@Value(${app.usertype.specific})
字符串userTypeSpecific;
@后映射(value=“递减”)
@应答器
公共响应declineUser(@RequestParam final String idUser,@RequestHeader(“userType”)String userType){
HttpStatus HttpStatus=HttpStatus.FORBIDDEN;
布尔结果=假;
if(userTypeSpecific.equals(userType)和&valService.validate(idUser,userType)){
结果=this.service.declineUser(idUser);
如果(结果){
httpStatus=httpStatus.OK;
}
}
返回响应状态(httpStatus).body(结果);
}
以下是我的测试代码:

@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());
    }



}
@SpringBootTest
@ExtendWith(SpringExtension.class)
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(属性={“app.usertype.specific=spec”,})
公共类UserControllerTest{
@嘲弄
IUSER服务;
@值(${app.usertype.specific}”)
字符串用户类型;
@嘲弄
服务增值服务;
@注射模拟
用户控制器;
@以前
公共作废设置(){
initMocks(this);
}
@配置
静态类配置{
@豆子
公共静态属性资源占位符配置器属性Resolver(){
返回新属性资源占位符配置器();
}
}
@试验
public void testDeclineUser(){
字符串idUser=“123”;
Assert.assertEquals(“测试用户类型”,“gae”,用户类型);
当(valservice.validate(any(),any())。然后返回(Boolean.TRUE);
when(service.declineUser(idUser))。然后返回(true);
ResponseEntity resultStatus=controller.declineUser(idUser,userType);
验证(此服务,次(1)).declinePieceJustif(numeroDemande);
Assert.assertEquals(“HTTP状态测试,HttpStatus.OK,resultStatus.getStatusCode());
Assert.assertEquals(“布尔状态测试”,true,resultStatus.getBody());
}
}

我假设,您已经设法模拟了“userType”,所以为了模拟“userTypeSpecific”,您可以使用Spring的ReflectionTestUtils.setField方法模拟@value变量。 您可以在此处找到详细信息:

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

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

请提供表示测试实现的代码好吗?请添加等于实现的代码好吗?我提供了控制器和测试实现我使用了@TestPropertySource。ReflectionTestUtils.setField是否更简单?谢谢,它工作了。我在@Before方法中添加了它;)我很高兴能提供帮助。:)