尝试使用HTML单元测试Spring Boot登录表单

问题描述

我在Spring Boot中有一个简单的HTML表单:

<form name="login" th:action="@{/login}" method="POST">
...
<button type="submit" id="submit"  name="submit" >Login</button>
</form>

然后我有以下映射:

http.authorizeRequests()
            // Allow anyone to use H2 (NOTE: NOT FOR PRODUCTION USE EVER !!! )
            .antMatchers("/admin/h2/**").permitAll()
            .antMatchers("/actuator/**").permitAll()

            .antMatchers("/login/**").permitAll()
            .antMatchers("/**").access(HASROLE_USER)

            // Login Configuration
            .and().formLogin()
            .loginPage("/login/form")

            .loginProcessingUrl("/login")

            .permitAll()
            .and().logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/login/form?logout")
            .permitAll()
    ;

然后我创建了一个HTML单元测试用例:

@ExtendWith(SpringExtension.class)

@SpringBoottest(webEnvironment = SpringBoottest.WebEnvironment.RANDOM_PORT)
@Slf4j
public class SessionManagementTests {

    @LocalServerPort
    private int serverPort;

    @Test
    @displayName("HTML Unit Welcome Home Page")
    public void testHomePage_htmlUnit() throws Exception {

        HtmlPage page = webClient.getPage("http://localhost:"+serverPort+"/login/form");
 
        final HtmlForm form = page.getFormByName("login");
        log.info("*** getActionAttribute: {}",form.getActionAttribute());

        HtmlInput username = page.getHtmlElementById("username");
        username.setValueAttribute("user1");

        HtmlInput password = page.getHtmlElementById("password");
        password.setValueAttribute("user1");

        HtmlButton submit =  page.getHtmlElementById("submit");

        // *** THROWS ERROR HERE ***
        //
        HtmlPage pageAfterClick = submit.click();


    }

运行应用程序时,我可以手动登录,没有问题。 但是当我尝试运行单元测试时,我在 / login 上看到404。

错误

com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 404 Not Found for http://localhost:49290/login

当我在 http:// localhost:8080 / actuator / mappings 上查看执行器映射时,我没有看到 / login 被映射。

我确实看到了 / login / form ,因为这是我的Thymeleaf登录视图页面

但是我不知道如何测试我的登录信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...