使用 PowerMockito 模拟接口实现



我需要模拟在我的代码中实现接口的调用

public interface User {
    public void getUser(User userId, Role role);
}
public UserService implements User {
   public void UserService(User userId, Role role) {
   }
}

另一个服务类别:

public ValidationService {
    public void validateUser() {
        ***User user = new UserService(user,role);***
   }
}

我想使用 Powermockito 或模拟来模拟UserService/User,该怎么做?

我遵循了这种方法:

@RunWith(PowerMockRunner.class)
@PrepareForTest({UserService.class,User.class})
public class ValidationServiceTest {
    @Mock
    User user = Mockito.mock(User.class);
    @Test
    public void getValidUser() {
        PowerMockito.whenNew(UserService.class).withAnyArguments().thenReturn(user); 
    }
}

这似乎不起作用,我将如何模拟界面?

User注入ValidationService,而不是ValidationService中创建它。例如:

public ValidationService {
    private User user;
    public ValidationService(User user) {
        this.user = user;
    }
    public void validateUser() {
        // use the 'user' class member...
   }
}

现在,嘲笑User变得简单了:

User user = Mockito.mock(User.class);
ValidationService sut = new ValidationService(user);
// establish any test-specific expectations of the User instance here
sut.validateUser();

这里不需要PowerMock,只需要普通的旧Mockito和依赖注入。

注意:依赖注入不需要使用 Spring 或 Guice 或其他任何东西。这些库只是实现 DI 的一种手段。通过传入对象的依赖类(通过构造函数或 setter(来手动构造对象是实现 DI 的另一种方法。这里的关键点是,采用此方法将允许您在构造供测试用例使用的ValidationService时注入不同的User实现。

相关内容

  • 没有找到相关文章

最新更新