GAE 1.3.8中使用JUnit 4进行单元测试

  貌似从1.3.1开始,gae采用了新的junit实现方法。junit本身非常简单,这个就不说了。但是在使用的过程中,我还是遇到了不少的问题。
  因为GAE的数据库不是与应用独立的,如果在单元测试中直接使用与数据库操作相关的jdo代码,就会弹出一大堆Exception。谷歌的官方code上有介绍如何使用local unit testing(需要跳墙),其中提到了如果单元测试中需呀使用数据库,就要配置环境,而Google在com.google.appengine.tools.development.testing这个包中提供了许多类如LocalServiceTestHelper,可以自动完成环境配置。
  郁闷的是我使用的是Eclipse 3.5,GAE的SDK是安装插件时自动下载的。我在测试类中导入com.google.appengine.tools.development.testing时总是找不到包。上网查了很多资料也没提到这个问题,官网上说在命令行编译带本地数据库操作的junit for gae时,需要导入appengine-api.jar,appengine-api-labs.jar,appengine-api-stubs.jar,我在本地工程文件中发现,使用向导生成的GAE Project并未导入这些包。于是自己下了个gae sdk,将appengine-java-sdk-1.3.8\lib\impl路径下的这三个包加入工程的build path里。另外还有appengine-java-sdk-1.3.8\lib\testing\appengine-testing.jar,把这个加入到build path就可以用LocalServiceTestHelper等这些测试辅助类了。
import java.util.Iterator;

import javax.jdo.Extent;
import javax.jdo.PersistenceManager;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
import com.xiaohulu.wordMemorizor.dataObject.User;
import com.xiaohulu.wordMemorizor.util.PMF;
import static org.junit.Assert.*;

public class AccessServiceTest {
	
	private final LocalServiceTestHelper helper = new LocalServiceTestHelper(
			new LocalDatastoreServiceTestConfig());
	
	@Before
	public void setUp() {
		helper.setUp();
	}
	
	@After
	public void tearDown() {
		helper.tearDown();
	}

	@Test
	public void testInsert() {
		User user = new User();
		user.setUsername("dagebai");
		user.setPassword("123");
		user.setIsMan(true);
		user.setEmail("badsf");
		user.setIntro("blablabla");
		PersistenceManager pm = PMF.get().getPersistenceManager();
		pm.makePersistent(user);
		Extent extent = pm.getExtent(User.class);
		Iterator iter = extent.iterator();
		while (iter.hasNext()) {
			User user2 = (User) iter.next();
			System.out.println(user2.getUsername());
		}
		extent.closeAll();
		pm.close();
	}
}

你可能感兴趣的:(eclipse,单元测试,JUnit,Google,GAE)