使用MockMvcBuilders.standaloneSetup时模拟@Resource

时间:2018-09-27 21:43:55

标签: java spring spring-boot mockmvc

我的团队目前正在构建SpringBoot API。以下是我的团队如何模拟我们的控制器测试的摘要。当我们将普通类作为依赖项时,此方法有效。

<StyledSwitch theme={lightTheme.secondary} />

我们无法弄清楚如何像下面这样模拟@Resource进行类似的测试。

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestController {

    private MockMvc mockMvc;

    @Mock
    private MyService myService;

    @Autowired
    @InjectMocks
    private MyController myController;

    @Before
    public void setup() {

        //Build the controller mock handler
        mockMvc = MockMvcBuilders
            .standaloneSetup(myController)
            .build();
    }

1 个答案:

答案 0 :(得分:0)

由于domainCodes是私有的,因此您的控制器需要有一种为其构造器或设置器设置值的方法。

设置

    @Autowired()
    @Qualifier("domainNameToCode")
    public void setDomainCodes(Map<String, Integer> domainCodes) {
        ...
    }

构造函数

  @Autowired()
    @Qualifier("domainNameToCode")
    public MyController(Map<String, Integer> domainCodes){

    }

在测试中,现在您可以注入模拟了。


如果您不想编辑源代码,则可以使用反射在对象上设置私有实例变量

//Using reflection to set a private field on an object
FieldUtils.writeField(controllerInstance, "domainCodes", new HashMap<>()) ;