我在 C#和 NUnit框架的帮助下编写了Selenium测试。在我的测试期间,可能会抛出许多异常,测试最终会失败。我想得到一些人的帮助,以便在控制台上写这个异常消息的合适方法是什么,我不知道会抛出什么异常。请参阅下面的我当前的代码示例:
[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 : Could not find element by: By.XPath://div[@class='name']
,其中控制台写入消息Exception of type 'NUnit.Framework.Internal.NUnitException' was thrown.
什么是正确的修改方法代码使控制台获得与NUnit Console Runner完全相同的错误消息。是否有任何全局Exception类或实例将相同的消息传递给Console.WriteLine()?
答案 0 :(得分:0)
在处理另一个异常时抛出异常通常是一个错误,但这正是你正在做的事情。你的TearDown正在创建一个NUnitException(它是NUnit内部的),没有消息也没有内部异常。这就是控制台报告的内容。
在进行任何设置后,您应该使用拆卸进行清理,而不是用于其他目的。是的,NUnit的许多高级用户都会在拆解时采用技巧,但根据我在这里看到的内容,我认为你并不想这样做。如果您的唯一目标是让NUnit正确报告错误,那就让它完成它的工作并编写您的测试以配合它。
如果调用抛出意外异常的代码,NUnit会将其报告为错误。错误消息将包括异常的类型和任何消息。或者,您可以通过使用Assert.DoesNotThrow(()=> ...)调用相同的代码将错误转换为失败;无论哪种方式都会报告错误。
答案 1 :(得分:0)
经过一些研究后我发现NUnit测试的最后一条异常消息可以通过简单地声明来传递
string issue = TestContext.CurrentContext.Result.Message;
Console.WriteLine(issue);
这将完全打印出Test Explorer NUnit Console获得的相同消息。