Java Vaadin-Spring作用域对象:是否可以在不启动servlet容器的情况下创建Vaadin单元测试?
介绍了两个Spring作用域对象,即Java Vaadin-Spring作用域对象:是否可以在不启动servlet容器的情况下创建Vaadin单元测试?,java,spring,unit-testing,vaadin,Java,Spring,Unit Testing,Vaadin,介绍了两个Spring作用域对象,即vaadin会话和vaadin用户界面作用域。在spring上下文中引用任何Vaadin对象之前,有必要绑定这两个作用域,如果: 它们用@VaadinSessionScope或@UIScope注释装饰,或 它们通过依赖链引用任何以这种方式修饰的bean 当您在诸如jboss或tomcat之类的servlet容器中启动它时,所有这些都运行得非常好。问题是: 如果您希望加载一个spring应用程序上下文,该上下文包含为单元测试目的而如此修饰的任何vaadin
vaadin会话
和vaadin用户界面
作用域。在spring上下文中引用任何Vaadin对象之前,有必要绑定这两个作用域,如果:
- 它们用
或@VaadinSessionScope
注释装饰,或@UIScope
- 它们通过依赖链引用任何以这种方式修饰的bean
如果您希望加载一个spring应用程序上下文,该上下文包含为单元测试目的而如此修饰的任何vaadin bean,如何创建允许在不启动web应用程序容器的情况下加载和访问上下文的最小测试?Spring MVC在这方面非常擅长,但当您使用vaadin Spring时,它并不是那么简单-相关的vaadin组件是高度连接的 (下面的示例介绍了如何构造一组Vaadin组件以允许通过上述作用域进行访问,其中不包括完整容器的配置,而只是获得正常运行的应用程序上下文所需的最低配置。)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigWebContextLoader.class)
@WebAppConfiguration
公共类SpringConfigurationTest扩展了断言{
@配置
@ComponentScan({“org.example”})//包含一些ClassReferenceGaspringVaadInBean.class
公共静态类配置{
}
@自动连线
WebApplicationContext应用上下文;
类MyDeploymentConfiguration扩展了DefaultDeploymentConfiguration{
公共MyDeploymentConfiguration(类servletClass,属性initParameters){
super(servletClass,initParameters);
initParameters.put(Constants.SERVLET_PARAMETER_UI_PROVIDER,DefaultUIProvider.class.getName());
}
}
类MyVaadinServlet扩展了VaadinServlet{
@凌驾
公共字符串getServletName(){
返回getClass().getSimpleName();
}
}
类MyUI扩展了UI{
@凌驾
受保护的void init(VaadinRequest请求){
}
}
@以前
public void setupvadinscopes()引发异常{
MyVaadinServlet vaadinServlet=新的MyVaadinServlet();
MyDeploymentConfiguration deploymentConfiguration=新的MyDeploymentConfiguration(MyVaadinServlet.class,
新属性());
VaadinServletService vaadinService=新的VaadinServletService(vaadinServlet,deploymentConfiguration);
VaadinServletRequest vaadinRequest=新的VaadinServletRequest(新的MockHttpServletRequest(),vaadinService);
//创建vaadin会话和vaadin ui,并将它们绑定到线程
VaadinSession VaadinSession=vaadinService.findVaadinSession(vaadinRequest);
Integer uiId=Integer.valueOf(vaadinSession.getNextUIid());
UI=新的MyUI();
ui.设置会话(会话);
UI.setCurrent(UI);
doInit(vaadinRequest,uiId,null);
vaadinSession.addUI(ui);
}
@试验
公共void test0(){
试一试{
getBean(someClassReferenceInGaspringVaadInBean.class);
}捕获(例外e){
失败(“范围可能未正确设置”);
}
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigWebContextLoader.class)
@WebAppConfiguration
public class SpringConfigurationTest extends Assert {
@Configuration
@ComponentScan({ "org.example" }) // contains SomeClassReferencingASpringVaadinBean.class
public static class Config {
}
@Autowired
WebApplicationContext applicationContext;
class MyDeploymentConfiguration extends DefaultDeploymentConfiguration {
public MyDeploymentConfiguration(Class<?> servletClass, Properties initParameters) {
super(servletClass, initParameters);
initParameters.put(Constants.SERVLET_PARAMETER_UI_PROVIDER, DefaultUIProvider.class.getName());
}
}
class MyVaadinServlet extends VaadinServlet {
@Override
public String getServletName() {
return getClass().getSimpleName();
}
}
class MyUI extends UI {
@Override
protected void init(VaadinRequest request) {
}
}
@Before
public void setupVaadinScopes() throws Exception {
MyVaadinServlet vaadinServlet = new MyVaadinServlet();
MyDeploymentConfiguration deploymentConfiguration = new MyDeploymentConfiguration(MyVaadinServlet.class,
new Properties());
VaadinServletService vaadinService = new VaadinServletService(vaadinServlet, deploymentConfiguration);
VaadinServletRequest vaadinRequest = new VaadinServletRequest(new MockHttpServletRequest(), vaadinService);
// creates vaadin session and vaadin ui, binds them to thread
VaadinSession vaadinSession = vaadinService.findVaadinSession(vaadinRequest);
Integer uiId = Integer.valueOf(vaadinSession.getNextUIid());
UI ui = new MyUI();
ui.setSession(vaadinSession);
UI.setCurrent(ui);
ui.doInit(vaadinRequest, uiId, null);
vaadinSession.addUI(ui);
}
@Test
public void test0() {
try {
applicationContext.getBean(SomeClassReferencingASpringVaadinBean.class);
} catch (Exception e) {
fail("scopes were probably not set up correctly");
}
}
}