如何在PowerMock中模拟一个方法



我使用的是PowerMock 1.4.12和JUnit 4.8.1。我在获取返回我想要的数据的方法时遇到了问题。我有

@Before
public void setUp() throws Exception
{
    ...
    userService = createMock(UserService.class);
    loginController.setUserService(userService);
    …
}
@Test
public final void testAuthenticateForLoggedInAdmin()
{
    authorities.add(adminAuthority);
    final User user = new User();
    user.setUserName("userName");
    user.setPassword("password");
    user.setFirstName("firstName");
    user.setMiddleName("middleName");
    user.setLastName("lastName");
    user.setUrl("localhost");
    user.setId("id1");
    final TestsubcoAuthenticationUser principal = new TestsubcoAuthenticationUser(user.getUserName(), 
                                                                                              user.getPassword(),
                                                                                              true, 
                                                                                              true, 
                                                                                              true, 
                                                                                              true, 
                                                                                              authorities, 
                                                                                              user.getFirstName(), 
                                                                                              user.getLastName(),
                                                                                              user.getMiddleName(), 
                                                                                              user.getUrl(), 
                                                                                              user.getId(),
                                                                                              null,
                                                                                              null,
                                                                                              null);
    authentication = new UsernamePasswordAuthenticationToken(principal, new Object(), authorities);
    securityContext.setAuthentication(authentication);
    mockStatic(SecurityContextHolder.class);
    expect(SecurityContextHolder.getContext()).andReturn(securityContext);
    expect(userService.findByUsernameAndUrl(user.getUserName(), user.getUrl())).andReturn(user);
    ...
    String result = loginController.authenticate();

但是当我的方法从控制器内部被调用时,

        final User user = userService.findByUsernameAndUrl(sbUser.getUsername(), sbUser.getUrl());

返回值为空,而不是我指定的对象。这背后有什么理论或进一步故障排除的建议吗?我已经通过调试验证,在控制器中传递的String参数值与我在"expect"方法中指定的值相同。

看起来您没有在mock上调用replay

重播

but when my method in question gets called from within the controller,

我不确定你的意思,问题中的方法从控制器内调用。当你调用这个方法时,你的userService对象应该是你模拟的那个对象。如果参数值相同,也检查参数值。

如果你不觉得这有用,在这里分享你试图进行单元测试的更多细节。

相关内容

  • 没有找到相关文章

最新更新