#1 楼
您可以创建一个偶数侦听器:
EventListeners(NUnit 2.4.4)
Interface
传递给Install的扩展对象必须实现EventListener接口:
public interface EventListener
{
void RunStarted( string name, int testCount );
void RunFinished( TestResult result );
void RunFinished( Exception exception );
void TestStarted(TestName testName);
void TestFinished(TestResult result);
void SuiteStarted(TestName testName);
void SuiteFinished(TestResult result);
void UnhandledException( Exception exception );
void TestOutput(TestOutput testOutput);
}
您可以使用委托(lambda表达式)和闭包使try / catch块不那么难看。
它的工作原理是:
public void Try(Action testCode)
{
try
{
testCode();
}
catch (Exception e)
{
Console.WriteLine("Nice Error Here: " + e.Message);
}
}
[Test]
public void TestO1()
{
int actual = 5;
int expected = 4;
Assert.AreEqual(expected, actual);
}
[Test]
public void TestO2()
{
int actual = 5;
int expected = 4;
Try( () => Assert.AreEqual(expected, actual) );
}
方法Try接受代码作为参数,并在try块中执行它。因此,在catch块中,您可以应用任何必要的格式。
方法TestO1只是一个普通的单元测试,没有任何技巧。
TestO2的断言用方法Try:
Try( ()=>此处的任何代码行);
这将是相同的try / catch,但现在我不需要编写很多难看的代码。
#2 楼
EventListener
是必经之路。但是,有一个技巧:测试中的断言失败时,不会触发UnhandledException
。而是使用TestFinished
事件来处理失败的测试:public void TestFinished(TestResult result)
{
if (result.Executed && result.IsFailure)
{
Console.WriteLine(string.Format("Failure in test {0}", result.Name));
Console.WriteLine(result.Message);
}
}