C# NUnit:当异常性质未知时,将ex.消息写入控制台

C# NUnit:当异常性质未知时,将ex.消息写入控制台,c#,exception,nunit,console.writeline,C#,Exception,Nunit,Console.writeline,我在C和NUnit framework的帮助下编写了一个硒测试。在我的测试过程中,可能会抛出许多异常,测试最终将失败。我想得到一些人的帮助,在我不知道会抛出什么异常的情况下,用什么合适的方法将这个异常消息写入控制台。请参见下面我当前的代码示例: [Test] //NUnit attribute public void SomeTest(){ piece of code that might throw: NoSuchElementException TimeOutException Nul

我在CNUnit framework的帮助下编写了一个硒测试。在我的测试过程中,可能会抛出许多异常,测试最终将失败。我想得到一些人的帮助,在我不知道会抛出什么异常的情况下,用什么合适的方法将这个异常消息写入控制台。请参见下面我当前的代码示例:

[Test] //NUnit attribute
public void SomeTest(){
piece of code that might throw: 
NoSuchElementException 
TimeOutException 
NullPointerException 
ElementNotVisibleException and many many others
}

[TearDown] //NUnit attribute
public void AfterEveryTest(){
if((TestContext.CurrentContext.Result.Outcome.Equals(ResultState.Failure))||(TestContext.CurrentContext.Result.Outcome.Equals(ResultState.Error)))
{
NUnitException ex = new NUnitException ();
Console.WriteLine(ex.Message);
}
}

当我运行这段代码时,例如抛出NoSuchElementException,Visual Studio NUnit控制台运行程序会显示正确的消息(例如
OpenQA.Selenium.NoSuchElementException:not find element by:by.XP)ath://div[@class='name']
控制台写入消息的地方引发了类型为“NUnit.Framework.Internal.nuniteException”的异常。修改代码的正确方法是什么,以便控制台获得与NUnit控制台运行程序完全相同的错误消息。是否有任何全局异常类或实例将同一消息传递给控制台。WriteLine()?

在处理另一个异常时抛出异常通常是错误的,但这正是您正在做的。您的拆卸正在创建一个NUniteException(它是NUnit内部的),没有消息,也没有内部异常。这是控制台报告的

您应该在任何设置后使用teardown进行清理,而不是出于其他目的。是的,NUnit的许多高级用户在teardown中使用了一些技巧,但根据我在这里看到的情况,我认为您不想这样做。如果您的唯一目标是让NUnit正确报告错误,那么就让它完成它的工作,并编写您的测试来配合它


如果调用引发意外异常的代码,NUnit会将其报告为错误。错误消息将包括异常类型和任何消息。或者,您可以使用Assert.DoesNotThrow(()=>…)调用相同的代码,将错误转换为失败;无论哪种方式,都会报告错误。

经过少量研究后,我发现NUnit测试的最后一条异常消息可以通过简单地声明

string issue = TestContext.CurrentContext.Result.Message;
Console.WriteLine(issue);

这将完全打印测试资源管理器NUnit控制台收到的相同消息。

因此,您建议只调用异常而不是NUnitException?不,我告诉您不要做任何事情!NUnit3控制台应该打印错误消息本身。如果不是,则应该解决一些问题,但您的拆卸代码隐藏在g问题。
TestContext.CurrentContext.Result.Message
是NUnit计划显示的确切消息。自己显示它是(应该是)不必要。如果您试图理解最终阻止NUnit显示它的原因,您会更好地为自己服务。向我们展示如果您消除了拆卸代码,控制台中会发生什么。