这怎么工作? 根据我的理解,它不应该有。 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"));
}
}
答案 0 :(得分:2)
它只使用field injection。来自the documentation
现场注射; mocks将首先按类型解析(如果单个类型匹配注入将发生而不管名称如何),那么,如果有多个相同类型的属性,则通过匹配字段名称和模拟名称。
所以步骤是:
AuthorizationHandler
已实例化LDAPGroupAccessor
并将其分配给groupAccessor
@InjectMocks
使用groupAccessor
@Mock
的实例
醇>