assertAll 布尔值列表

assertAll a list of booleans

有一个用户可以访问的页面列表。 verifyAccess 具有 returns true/false 的功能,具体取决于用户尝试访问的页面。

例如 - 在个人资料页面上查找个人资料 IMG 定位器,在注销页面上查找注销按钮,等等...

我正在使用以下导入(JUnit API)

import org.assertj.core.api.SoftAssertions;
import org.junit.Assert;
import org.junit.jupiter.api.function.Executable;

像这样

List<Boolean> assertList = null;
 for (int i = 0; i < pageList.size(); i++) {
            String pageName = pagesList.get(i);
            assertList = new LinkedList<>();
            assertList.add(accessCheck.verifyAccessToPage(userRole, pageName));
        }
    assertAll((Executable) assertList.stream()); 
}

public boolean verifyAccessToPage(String userRole, String pageName) {
        switch (page) {
            case "Profile page":
                return profilePage.profileImg.isCurrentlyEnabled();
            case "Create(invite) users":
                jobslipMyCompanyPage.clickInviteBtn();
                return logoutPage.logoutBtn.isCurrentlyEnabled();
                    }

}

问题是 assertList 列表大小始终为 1,但 for 循环 运行 12 次,共 12 页。另外 assertAll 给出以下错误 java.lang.ClassCastException: java.util.stream.ReferencePipeline$Head cannot be cast to org.junit.jupiter.api.function.Executable

我做错了什么?

您可以使用以下库:

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.oneOf;

然后这样断言:

assertThat(assertList, is(oneOf(expectedBooleanValues)));

expectedBooleanValues 可以是 true 或 false

Issue is assertList list size is always 1, but for loop run 12 times for 12 pages.

for 循环的每个 运行 都会再次初始化变量 assertList。因此,它始终只包含一个元素。

要断言 verifyAccessToPage 的每个结果,您可以使用 AssertJ 的 SoftAssertions:

import static org.assertj.core.api.SoftAssertions.assertSoftly;

assertSoftly(soft -> {
    for (int i = 0; i < pageList.size(); i++) {
        String pageName = pagesList.get(i);
        boolean accessToPage = verifyAccessToPage(userRole, pageName);
        soft.assertThat(accessToPage).as("access to page %s for role %s", pageName, userRole).isTrue();
    }
});

如果您想测试 verifyAccessToPage 的调用不会引发异常,您可以将代码更改为:

import static org.junit.jupiter.api.Assertions.assertAll;

List<Executable> assertList = new LinkedList<>();
for (int i = 0; i < pageList.size(); i++) {
    String pageName = pagesList.get(i);
    assertList.add(() -> accessCheck.verifyAccessToPage(userRole, pageName));
}
assertAll(assertList);