java - Spring MVC Controller 单元测试: How do I set private instance boolean field?

标签 java unit-testing spring-mvc spring-restcontroller

我有一个 Spring MVC REST Controller 类,它有一个通过 @Value 注入(inject)的私有(private)实例 boolean 字段,

@Value("${...property_name..}")
private boolean isFileIndex;

现在要对这个 Controller 类进行单元测试,我需要注入(inject)这个 boolean 值。

如何使用 MockMvc 做到这一点?

我可以使用反射,但 MockMvc 实例没有提供底层 Controller 实例来传递给 Field.setBoolean() 方法。

测试类运行时无需模拟或注入(inject)此依赖项,其值始终为false。我需要将其设置为 true 以覆盖所有路径。

设置如下所示。

@RunWith(SpringRunner.class)
@WebMvcTest(value=Controller.class,secure=false)
public class IndexControllerTest {

    @Autowired
    private MockMvc mockMvc;
 ....
}

最佳答案

您可以使用@TestPropertySource

@TestPropertySource(properties = {
    "...property_name..=testValue",
})
@RunWith(SpringRunner.class)
@WebMvcTest(value=Controller.class,secure=false)
public class IndexControllerTest {

    @Autowired
    private MockMvc mockMvc;

}

您还可以从文件中加载测试属性

@TestPropertySource(locations = "classpath:test.properties")
<小时/>

编辑:其他一些可能的替代方案

@RunWith(SpringRunner.class)
@WebMvcTest(value=Controller.class,secure=false)
public class IndexControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired 
    private Controller controllerUnderTheTest;


    @Test
    public void test(){
        ReflectionTestUtils.setField(controllerUnderTheTest, "isFileIndex", Boolean.TRUE);

        //..
    }

}

关于java - Spring MVC Controller 单元测试: How do I set private instance boolean field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44517648/

相关文章:

php - 单元测试 PHP 内嵌的 Javascript 代码

java - 删除 Rest Controller 中的方法 Cors 问题

java - 使用jsp :include to pass a array from one jsp page to another

java - 为应用程序中的子应用程序制作启动器屏幕的好方法?

java - 使用 Mockito 模拟 Hibernate 的 SessionFactory 时测试失败

java - 单击 EditText 字段后,RecyclerView 项目丢失 MATCH_PARENT 设置

php - 对 PHP 脚本进行单元测试

spring-mvc - Spring Boot - java.lang.ClassNotFoundException : org. springframework.context.ApplicationContextInitializer

java - 使用反射修改字符串的目的是什么?

java - 尝试在 java 中通过 tcp 发送千字节消息时出错