繁体   English   中英

具有新的初始化类变量的Mockito InjectMocks

[英]Mockito InjectMocks with new Initialized Class Variables

这怎么工作? 根据我的理解,它不应该有。 LDAPGroupAccessor是在类中被新初始化的,或者可以在构造函数本身中被新初始化,它不是被注入的,不是构造函数的参数,不是Spring bean的注入。

我知道使用反射是可能的,但是injectMocks如何注入它? 这不是破坏DI的目的吗?

@Component
public class AuthorizationHandler {

    private LDAPGroupAccessor groupAccessor = new LDAPGroupAccessor();

    public isUserAuthorized(String userId, String groupId){
        return groupAccessor.isUserInGroup(userId, ldapGroup);
    }
}

public class AuthorizationHandlerTest {

    @InjectMocks
    private AuthorizationHandler authorizationHandler;

    @Mock
    private LDAPGroupAccessor groupAccessor = new LDAPGroupAccessor();

    @Before
    public void setup() {
        String authorizedUser = "authorizedUser";
        Mockito.when(groupAccessor.isUserInGroup("authorizedUser", "someGroup")).thenReturn(true);
    }

    @Test
    public void test1() {
        Assert.assertEquals(true, authorizationHandler.isUserAuthorized("authorizedUser", "someGroup"));
    }
}

它仅使用场注入 文档中

场注入 ; 模拟将首先按类型解析(如果不考虑名称,将进行单个类型匹配注入),然后,如果存在多个相同类型的属性,则按字段名称和模拟名称的匹配进行解析。

因此,步骤如下:

  1. 实例化AuthorizationHandler
  2. 实例初始化程序称为
  3. LDAPGroupAccessor已创建并分配给groupAccessor
  4. @InjectMocks运行,并将分配给groupAccessor的实例替换为@Mock

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM