在TestNg软断言中显示assertEquals错误消息和给定自定义消息的任何方法

在TestNg软断言中显示assertEquals错误消息和给定自定义消息的任何方法,testng,assertions,Testng,Assertions,这是 是否有任何方法可以显示默认assertEquals错误消息以及软断言中给出的自定义消息 我的要求是自定义消息和断言错误消息,如下所示。“应为[1]故障,但找到[0]” 您可以创建自己的SoftAssert,这将发挥神奇的作用: public class MySoftAssert extends Assertion { // LinkedHashMap to preserve the order private Map<AssertionError, IAssert&g

这是

是否有任何方法可以显示默认assertEquals错误消息以及软断言中给出的自定义消息

我的要求是自定义消息和断言错误消息,如下所示。“应为[1]故障,但找到[0]”


您可以创建自己的SoftAssert,这将发挥神奇的作用:

public class MySoftAssert extends Assertion
{
    // LinkedHashMap to preserve the order
    private Map<AssertionError, IAssert> m_errors = Maps.newLinkedHashMap();

    @Override
    public void executeAssert(IAssert a) {
        try {
            a.doAssert();
        } catch(AssertionError ex) {
            onAssertFailure(a, ex);
            m_errors.put(ex, a);
        }
    }

    public void assertAll() {
        if (! m_errors.isEmpty()) {
            StringBuilder sb = new StringBuilder("The following asserts failed:\n");
            boolean first = true;
            for (Map.Entry<AssertionError, IAssert> ae : m_errors.entrySet()) {
                if (first) {
                    first = false;
                } else {
                    sb.append(", ");
                }
                sb.append(ae.getKey().getMessage());
            }
            throw new AssertionError(sb.toString());
        }
    }
}
公共类MySoftAssert扩展了断言
{
//LinkedHashMap以保留顺序
私有映射m_errors=Maps.newLinkedHashMap();
@凌驾
公共无效执行服务器(IAssert a){
试一试{
a、 doAssert();
}捕获(断言错误示例){
资产失败(a,ex);
m_错误。put(ex,a);
}
}
公共无效资产所有(){
如果(!m_errors.isEmpty()){
StringBuilder sb=new StringBuilder(“以下断言失败:\n”);
布尔值优先=真;
对于(Map.Entry ae:m_errors.entrySet()){
如果(第一){
第一个=假;
}否则{
某人加上(“,”);
}
sb.append(ae.getKey().getMessage());
}
抛出新断言错误(sb.toString());
}
}
}

是的,似乎这只是目前的解决方案。
public class MySoftAssert extends Assertion
{
    // LinkedHashMap to preserve the order
    private Map<AssertionError, IAssert> m_errors = Maps.newLinkedHashMap();

    @Override
    public void executeAssert(IAssert a) {
        try {
            a.doAssert();
        } catch(AssertionError ex) {
            onAssertFailure(a, ex);
            m_errors.put(ex, a);
        }
    }

    public void assertAll() {
        if (! m_errors.isEmpty()) {
            StringBuilder sb = new StringBuilder("The following asserts failed:\n");
            boolean first = true;
            for (Map.Entry<AssertionError, IAssert> ae : m_errors.entrySet()) {
                if (first) {
                    first = false;
                } else {
                    sb.append(", ");
                }
                sb.append(ae.getKey().getMessage());
            }
            throw new AssertionError(sb.toString());
        }
    }
}