如何将 Spring WithMockUser 注释与 TestNG 结合使用

Tec*_*nch 6 testng spring spring-test mockito springmockito

我将 Spring Boot 用于我的 Web 应用程序,并使用 TestNG 进行单元测试。以下是我正在尝试的单元测试

@ContextConfiguration
public class AuthorizerTest extends AbstractTestNGSpringContextTests {

    @InjectMocks
    private Authorizer authorizer = new Authorizer();

    @Mock
    private PermissionRuleRepository permissionRuleRepository;

    @BeforeMethod
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    @WithMockUser
    public void testCheckPermission() throws Exception {
        try {
            authorizer.checkPermission(null, PermissionLevel.Type.ACCOUNT_OTHER);
            fail();
        } catch (AccessDeniedException ade) {
            //
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

authorizer.checkPermission内部使用SecurityContext来获取当前用户名。但在调试时,authentication对象是null. 不知道为什么使用时它没有被填充WithMockUser

小智 3

您可以尝试将以下注释添加到您的测试类中。这对我有用。

@TestExecutionListeners({WithSecurityContextTestExecutionListener.class})
Run Code Online (Sandbox Code Playgroud)

可以在此处找到示例: https: //github.com/sbrannen/spring-events/blob/master/src/test/java/com/sambrannen/spring/events/SimpleScenarioTestNgTests.java