Java 如何在Spring引导单元测试中配置带@Mock注释的字段

Java 如何在Spring引导单元测试中配置带@Mock注释的字段,java,spring-boot,mockito,Java,Spring Boot,Mockito,我试图通过模拟注入的@服务来测试@RestController。我可以向模拟服务发出请求,但似乎无法自定义其模拟行为。不能将@Mock和doThrow(…)组合起来吗?或者我的when条款可能有问题吗 我的代码: @SpringBootTest 第二课控制器测试{ 私有MockMvc-MockMvc; @嘲弄 私塾服务; @注射模拟 私人莱森控制器; @试验 public void some_good_test_name()引发异常{ mockMvc=MockMvcBuilders.standa

我试图通过模拟注入的
@服务来测试
@RestController
。我可以向模拟服务发出请求,但似乎无法自定义其模拟行为。不能将
@Mock
doThrow(…)
组合起来吗?或者我的when条款可能有问题吗

我的代码:

@SpringBootTest
第二课控制器测试{
私有MockMvc-MockMvc;
@嘲弄
私塾服务;
@注射模拟
私人莱森控制器;
@试验
public void some_good_test_name()引发异常{
mockMvc=MockMvcBuilders.standaloneSetup(controller.build();
doThrow(新注册失败(“测试失败”))
.when(服务).addAttendee-ToLesson(
Mockito.any(Attendee.class)、Mockito.anyString()、Mockito.anyString()
);
最终字符串requestJson=“”
{
“电子邮件”:email@example.com",
“姓名”:“约翰·多伊”,
“消息”:“你好”
}
""";
mockMvc.perform(
帖子(“/lessons/123/与会者”)
.contentType(MediaType.APPLICATION\u JSON\u值)
.content(requestJson)
)
.andExpect(状态().isOk())
.andExpect(content().json(“{}”);
}
}

问题在于服务调用的第二个参数是由@Value注入的字符串,因此在测试中该参数变为null,并且anyString与之不匹配

我没有使用ReflectionUtils来设置这个@value字段的值,而是将控制器重写为使用构造函数注入,将@Autowired和@value注释移动到构造函数中