源文转自:More on unit testing with an injected JDO PersistenceManager
Regarding my previous post, it turns out that I needed a TestPMF implementation sooner than I thought. The reason is the way I’m injecting a DispatchTestService in my unit tests (as described in this post). I’m calling createInjector() in the setUp() method, which gets run before each test method:
@Override
protected void setUp() throws Exception
{
super.setUp();
Injector inj = Guice.createInjector(new ServerModule(),
new DispatchTestModule());
testSvc = inj.getInstance(StandardDispatchService.class);
// This pm is needed only for code in this class that calls a PM directly
// ActionHandlers are injected with the PMF singleton from Guice
pm = inj.getInstance(PMF.class).getPersistenceManager();
}
Since setUp() gets called before each test method, Guice is initialized for each test method, and therefore Guice calls the constructor for my DefaultPMF class for each test method. Repeated from the previous post, the DefaultPMF class looks like:
package com.turbomanage.gwt.server;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
public final class DefaultPMF implements com.turbomanage.gwt.server.PMF
{
private final PersistenceManagerFactory pmfInstance = JDOHelper
.getPersistenceManagerFactory("transactions-optional");
public DefaultPMF()
{
}
@Override
public PersistenceManager getPersistenceManager()
{
return pmfInstance.getPersistenceManager();
}
}
Because DefaultPMF creates a named PersistenceManagerFactory, JDO complains that the named PersistenceManagerFactory has already been created. My solution for now is to replace the DefaultPMF with a TestPMF that uses a Properties map to initialize the PersistenceManager, just as the AppEngineFan TestInitializer does. Here’s a working TestPMF:
package com.turbomanage.gwt.server;
import java.util.Properties;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
public class TestPMF implements PMF
{
private final PersistenceManagerFactory pmf;
public TestPMF()
{
Properties newProperties = new Properties();
newProperties
.put("javax.jdo.PersistenceManagerFactoryClass",
"org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory");
newProperties.put("javax.jdo.option.ConnectionURL", "appengine");
newProperties.put("javax.jdo.option.NontransactionalRead", "true");
newProperties.put("javax.jdo.option.NontransactionalWrite", "true");
newProperties.put("javax.jdo.option.RetainValues", "true");
newProperties.put("datanucleus.appengine.autoCreateDatastoreTxns",
"true");
newProperties.put("datanucleus.appengine.autoCreateDatastoreTxns",
"true");
pmf = JDOHelper.getPersistenceManagerFactory(newProperties);
}
@Override
public PersistenceManager getPersistenceManager()
{
return pmf.getPersistenceManager();
}
}
Now simply bind PMF to its TestPMF implementation in your Guice module for tests (DispatchTestModule in the setUp() method above), and each unit test method will run with a freshly created PersistenceManager.
分享到:
相关推荐
**GWT(Google Web Toolkit)简介** GWT,全称为Google Web Toolkit,是Google推出的一款开源的Java开发框架,主要用于构建高性能、跨浏览器的富互联网应用程序(Rich Internet Applications,简称RIA)。GWT允许...
This book is designed to give developers all the information they need to develop their own GAE+GWT applications, with a particular focus on some of the technologies useful for building scalable ...
gwt-maven-plugin 该插件旨在通过提供两种特定的打包方式: gwt-lib和gwt-app ,使使用Maven构建GWT项目更加容易。 基本用法 将插件添加到您的POM并启用扩展: < groupId>net.ltgt.gwt.maven</ groupId> ...
1. **GWT入门教程**:对于初学者,资料可能涵盖GWT的基本概念、开发环境搭建(如Eclipse插件配置)、Hello World示例、MVP(Model-View-Presenter)设计模式的介绍,以及如何创建和运行第一个GWT项目。 2. **GWT...
现在,该插件被认为是legacy GWT maven plugin (又名mojo GWT maven插件),而新插件被认为是new generation GWT maven plugin (又名tbroyer GWT maven插件)。 仍然支持旧版maven插件,但强烈建议将新插件用于新...
**标题:“GWT.rar_On Purpose_gwt”** 这个标题表明我们关注的是Google Web Toolkit (GWT)的一个特定主题,即其“目的”。"On Purpose"可能是指深入理解GWT的设计理念、应用场景以及如何有效地利用它来开发Web应用...
Eclipse是一款广泛使用的集成开发环境(IDE),而GWT for Eclipse则是Eclipse的一个插件,专门用于支持GWT应用程序的开发。这个插件针对Eclipse的3.7和3.6版本进行了优化,以提供更好的开发体验。 GWT的核心功能...
Expanding on the concepts covered in Chapter 10, this chapter delves into common usage patterns and custom serialization for GWT-RPC. It covers techniques such as polling and emulating server-push. #...
**Cypal Studio for GWT** 是一个专为 **Eclipse IDE** 设计的插件,旨在简化基于 **Google Web Toolkit (GWT)** 的 **Ajax** 应用程序的开发流程。通过使用 GWT,Java 开发人员可以利用纯 Java 语言编写富互联网...
4. **GWT MVP模式**: Model-View-Presenter (MVP) 是GWT推荐的架构模式,它有助于分离视图逻辑、业务逻辑和数据模型,使得代码更易于维护和测试。 5. **异步通信(GWT RPC)**: GWT提供了Remote Procedure Call (RPC)...
**GWT(Google Web Toolkit)** 是一个由Google开发的开放源代码JavaScript开发框架,它允许Java开发者使用Java语言编写Web应用程序,然后自动编译成优化的JavaScript代码。GWT进阶教程旨在帮助开发者深入理解并熟练...
Spring4GWT是将Spring框架与Google Web Toolkit (GWT) 结合的一种技术,它旨在帮助开发者在GWT应用中更好地实现服务层管理和依赖注入,从而提升开发效率和代码的可维护性。以下是对Spring4GWT技术的详细说明: 1. *...
GWT(Google Web Toolkit)是Google推出的一款开源的JavaScript开发框架,它允许开发者使用Java语言编写Web应用程序,并自动生成优化的JavaScript代码。RPC(Remote Procedure Call)是GWT中的一个核心特性,用于...
《GWT揭秘》试读:运行调试项目 GWT(Google Web Toolkit)是Google推出的一款用于构建高性能、跨浏览器的富互联网应用程序(Rich Internet Applications,RIA)的开发框架。它允许开发者使用Java语言来编写客户端...
GWT,全称为Google Web Toolkit,是一个开源的Java框架,用于构建高性能、可维护的富互联网应用程序(RIA)。GWT允许开发者使用Java语言编写客户端代码,然后通过编译器将其转换为优化过的JavaScript,以便在各种...
**GWT(Google Web Toolkit)** 是一个由Google开发的开放源代码工具包,用于构建高性能的、基于JavaScript的Web应用程序。它允许开发者使用Java语言编写客户端代码,并自动将其编译为优化过的JavaScript,从而提高...
标题 "GWT 学习资料" 指的是 Google Web Toolkit(GWT)的相关学习资源。GWT 是一个开源的Java框架,它允许开发者使用Java语言编写客户端的Web应用程序,然后自动生成优化过的JavaScript代码,使得应用能在浏览器上...
GWT(Google Web Toolkit)是一个开源的Java开发框架,由Google公司开发,主要用于简化Web应用的开发。它允许开发者使用Java编写客户端的代码,然后通过GWT提供的编译器自动转换成浏览器可以执行的JavaScript和HTML...
Google Web Toolkit (GWT) 是一个强大的开源框架,它允许开发者使用 Java 语言来构建复杂的、高性能的 web 应用程序。GWT 提供了一种高效的方法,将 Java 代码编译成 JavaScript 和 HTML,使其能在客户端浏览器中...