You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅验证公共构造函数时GuardClauseAssertion未触发失败的原因

问题解答

核心原因

你的单元测试未触发失败,本质是GuardClauseAssertion的校验范围和代码逻辑不匹配:

  • 你只要求校验TestClass的公共构造函数,但TestClass的构造函数本身没有对firstDependency参数做任何null守卫——它只是把参数直接传递给基类构造函数,自身不会抛出ArgumentNullException。
  • GuardClauseAssertion默认仅校验被指定的构造函数自身的参数验证逻辑,不会自动递归检查基类的构造函数。基类的构造函数是protected的,既不在你指定的校验范围内,而且它本身也没有添加null守卫,所以即使传入null也不会触发异常。

额外细节

你在TestClass构造函数中给基类的第二个参数固定传了string.Empty,这个值不会被AutoFixture生成的测试数据覆盖,所以基类的secondDependency永远不会是null,也不会因为这个参数触发异常。

如何让测试正确触发失败

如果想要校验基类构造函数的参数守卫,需要显式指定基类的构造函数进行校验:

// 同时校验TestClass的公共构造函数和TestBaseClass的protected构造函数
assertion.Verify(typeof(TestBaseClass).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic));
assertion.Verify(typeof(TestClass).GetConstructors(BindingFlags.Public));

或者给TestClass的构造函数添加自己的守卫子句,确保参数非null后再传递给基类:

public TestClass(string firstDependency)
  : base(firstDependency ?? throw new ArgumentNullException(nameof(firstDependency)), string.Empty)
{
}

内容的提问来源于stack exchange,提问作者henkie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:40:16