Mockito无法运行存根方法

时间:2014-08-08 14:13:38

标签: java spring mockito

我试图通过在传入字符串“john”时返回User对象来存根类的方法(spring-data-jpa存储库)。

当user.findByUsername(“john”)被调用时,在userService中发生的事情总是返回null而不是我所定义的任何User对象:

when(users.findByUsername("john"))
    .thenReturn(any(User.class));    

当我在测试方法中放置断点并将用户与userService.users进行比较时,它们是相同的。

我不知道为什么会发生这种情况,因为UserRepository只是一个界面?

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = ServiceTestContext.class)
public class UserServiceImplTests {

@InjectMocks
private UserServiceImpl userService;

@Mock
private UserRepository users;

@Test
public void signupUser_alreadyExistingUsername_userCreatedWithRandomGeneratedUsername() {
    // .. creation of emailSignupCommand Object

    when(users.findByUsername("john"))
            .thenReturn(any(User.class));
    userService.signupUser(emailSignupCommand);

    User expectedUser = new User.Builder()
            .withEmail(EMAIL)
            .withPassword(PASSWORD)
            .build();

    // ... verification code
}

}

pom version

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
</dependency>

idea debugger variables view

1 个答案:

答案 0 :(得分:1)

一种方法无法返回&#34;任何&#34;用户实例。你必须告诉它返回给定的用户。

any()可以用作存根方法参数,例如:无论您使用哪个ID,我都希望您返回John:

when(users.findByUsername(any(String.class)))
        .thenReturn(new User("John");