0

我正在使用 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());

返回值为 null 而不是我指定的对象。为什么会出现这种情况的任何理论或进一步排除故障的建议?我通过调试验证了控制器中传入的String参数值和我在“expect”方法中指定的值是一样的。

4

2 回答 2

1

看起来你没有调用replay你的模拟。

重播

于 2013-06-07T10:41:19.593 回答
0
but when my method in question gets called from within the controller,

我不确定从控制器内部调用有问题的方法是什么意思。当您调用该方法时,您的userService对象应该与您模拟的对象相同。如果相同,还要检查参数值。

我觉得这没什么用,请在此处分享您尝试进行单元测试的更多细节。

于 2013-06-07T13:42:29.387 回答