我目前正在使用 Spring Boot 1.4。我正在创建我的测试,但需要一些帮助来解决以下情况:
我有一个请求范围的 bean,为了简单起见,假设它是一个简单的 POJO,带有一个属性、一个 setter 和一个 getter。我想创建一个测试以确保该 bean 的设置器在请求中被调用一次且仅一次。
这是我的方法:
@Component
@RequestScope
public class MyRequestScopedBean {
private String aProperty;
public String getaProperty() {
return aProperty;
}
public void setaProperty(String aProperty) {
this.aProperty = aProperty;
}
}
@Controller
public class SampleController {
...
@GetMapping("/some-random-url")
public String doSomething(MyRequestScopedBean myRequestScopedBean) {
...
myRequestScopeBean.setaProperty("some random value");
...
}
}
@RunWith(SpringRunner.class)
@WebMvcTest(SampleController.class)
@WebAppConfiguration()
public class SampleControllerTest {
...
@MockBean
private MyRequestScopedBean myRequestScopedBean;
@Autowired
private MockMvc mvc;
....
@Test
public void aPropertySetterShouldBeCalledOnceWhenInvokingURL() throws Exception {
this.mvc.perform(get("/some-random-url")
.accept(MediaType.TEXT_HTML));
verify(myRequestScopedBean, times(1)).setaProperty(anyString());
}
}
但是测试失败,说明从未调用过“setaProperty”。
我还检查了 myRequestScopeBean.getaProperty 值,但始终返回 null。
我猜问题是控制器中注入的 MyRequestScopeBean 的实例在“执行”结束后不再存在,因此,它与我的测试中注入的不一样。
有什么方法可以检查是否在请求中调用了这个 setter 方法?
提前致谢!