SoftAssert的assertAll产生的断言结果,在TestNG的报告中重复记录

博客主要介绍了如何解决原引用SoftAssert导致的问题,并提供了一个自定义的MyAssert类,该类继承自Assertion,用于记录失败的断言并在适当的时候抛出错误。在MyAssert中,维护了一个LinkedHashMap来保存错误信息,并提供了assertAll方法来一次性抛出所有失败的断言。修复后的报告效果良好。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 原引用assertion的是SoftAssert的对象,结果如下:

解决办法:

自己重写Assertion

package pro.assertion;

import java.util.Map;

import org.testng.asserts.Assertion;
import org.testng.asserts.IAssert;
import org.testng.collections.Maps;
/**
 * @author 这个博主狠弱? 
 */
public class MyAssert extends Assertion {
	// LinkedHashMap to preserve the order
	private final Map<AssertionError, IAssert<?>> m_errors = Maps.newLinkedHashMap();
	private static final String DEFAULT_SOFT_ASSERT_MESSAGE = "The following asserts failed:";

	@Override
	protected void doAssert(IAssert<?> a) {
		onBeforeAssert(a);
		try {
			a.doAssert();
			onAssertSuccess(a);
		} catch (AssertionError ex) {
			onAssertFailure(a, ex);
			m_errors.put(ex, a);
		} finally {
			onAfterAssert(a);
		}
	}

	public void assertAll() {
		assertAll(null);
	}

	public void assertAll(String message) {
		if (!m_errors.isEmpty()) {
			System.out.println("msize:" + m_errors.size());
			StringBuilder sb = new StringBuilder(null == message ? DEFAULT_SOFT_ASSERT_MESSAGE : message);
			boolean first = true;
			for (AssertionError error : m_errors.keySet()) {
				if (first) {
					first = false;
				} else {
					sb.append(",");
				}
				sb.append("\n\t");
				sb.append(getErrorDetails(error));
			}
			m_errors.clear();  //只需要加入这一行就行了
			throw new AssertionError(sb.toString());
		}
	}
}

 

解决后报告效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值