我正在使用 Spring MVC (3.2.2) 和 GAE (1.7.7) 开发应用程序,但 LocalDatastoreServiceTestConfig 和我的 JUnit 测试存在一些问题。使用时,我有许多服务层单元测试工作正常...
private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());
@Before
public void setUp() throws Exception
{
helper.setUp();
}
public void tearDown() throws Exception
{
helper.tearDown();
}
然后,我创建了一些旨在测试 Spring MVC 控制器的测试,例如以下...
@Controller
@RequestMapping("/users")
public class UserController
{
@Autowired
private UserService userService;
@RequestMapping(value="/user/{userName}",method=RequestMethod.GET, produces="application/json")
public @ResponseBody User getUser(@PathVariable String userName)
{
return this.userService.getUser(userName);
}
}
我的测试如下所示...
@Test
public void testGetUser() throws Exception
{
User user = new User();
//create user object and save to db...
//check that it's been created
user = this.userService.getUser(userIdOne);
assertNotNull(user);
///other asserts...
this.mockMvc.perform(get("/users/user/"+user.getId()).accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType("application/json"));
}
不幸的是,这似乎不起作用,因为控制器(getUser)方法中的代码没有找到在调用之前创建和检索的用户。
经过一番搜索后,我发现了一些关于本地 GAE 数据源和多线程问题的帖子。问题是来自本地数据源的数据在其他线程上不可用。这是通过在您正在使用的所有线程上调用 APIProxy.setEnvironmentForCurrentThread 来修复的。我怀疑这是我在这里面临的问题(即 mockmvc 代码正在创建一个单独的线程)但是我无法在不更改非测试代码的情况下解决这个问题。
有没有人遇到过这个或有任何建议?提前致谢。