gpt4 book ai didi

unit-testing - Debug.Assert 会干扰 MSTests,我该如何解决它?

转载 作者:行者123 更新时间:2023-12-02 17:55:28 30 4
gpt4 key购买 nike

所以我有一个通过 MSTests 进行单元测试的方法,以确保它在收到错误数据时正确抛出异常。

但是该方法具有 Debug.Assert,因此如果在我处于 Debug模式试图查找错误的实际测试期间发生这种情况,则在调试时会捕获该方法。

因此,以这种方式运行时,单元测试无法自动化,因为 Assert 语句出现了 Abort、Retry、Ignore。所有 3 种情况都很重要:

我正在调试并寻找问题,因此我希望 Debug.Assert 可用。代码应该具有适当的保护子句,因此如果在生产中发生这种情况,则会引发异常。我的单元测试应该完全自动化,无需手动点击即可运行。

解决办法是什么?

最佳答案

到目前为止,当单元测试在本地运行时,Nicole 的解决方案并没有达到我想要的效果,因为我故意传递会触发断言的值,以确保抛出异常,从而干扰在本地自动运行单元测试。我想如果我愿意接受 [Conditional("DEBUG")] 就会起作用。编译属性并在 Release模式下运行单元测试。如果我想要这种行为,我可以提供一个带有 [Conditional("DEBUG")] 的测试级别(或汇编级别)包装器。在测试程序集中,但我可以从预编译的可重用类库中利用这个。

这非常接近我想要的,但还需要调用 Trace.Listeners.Clear();在我的测试套件中。

/// <summary>
/// To suppress UI assert messages use:
/// Trace.Listeners.Clear();
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="assertAgainst"></param>
/// <param name="condition"></param>
/// <param name="exception"></param>
/// <returns></returns>
public static T Assert<T>(this T assertAgainst, Func<T,bool> condition,Func<Exception> exception)
{
var conditionMet = condition(assertAgainst);
if (Debugger.IsAttached)
Debug.Assert(conditionMet);

//assertAgainst.Assert(x => x != null, () => new NullReferenceException());
if (!conditionMet)
throw exception();

return assertAgainst;
}

关于unit-testing - Debug.Assert 会干扰 MSTests,我该如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185330/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com