mstest实现类似单元测试nunit中assert.throws功能_asp.net教程-查字典教程网
mstest实现类似单元测试nunit中assert.throws功能
mstest实现类似单元测试nunit中assert.throws功能
发布时间:2016-12-29 来源:查字典编辑
摘要:我们做单元测试NUnit中,有一个断言Assert.Throws很好用,但当我们使用MsTest时你需要这样写:复制代码代码如下:[Test...

我们做单元测试NUnit中,有一个断言Assert.Throws很好用,但当我们使用MsTest时你需要这样写:

复制代码 代码如下:

[TestMethod]

[ExpectedException(typeof(ArgumentNullException))]

public void WriteToTextFile()

{

PDFUtility.WriteToTextFile("D:ACA.pdf", null);

}

现在让我们来扩展一下也实现类似成功能,增加一个类,代码如下:

复制代码 代码如下:

/// <summary>

/// Useful assertions for actions that are expected to throw an exception.

/// </summary>

public static class ExceptionAssert

{

/// <summary>

/// Executes an exception, expecting an exception to be thrown.

/// Like Assert.Throws in NUnit.

/// </summary>

/// <param name="action">The action to execute</param>

/// <returns>The exception thrown by the action</returns>

public static Exception Throws(Action action)

{

return Throws(action, null);

}

/// <summary>

/// Executes an exception, expecting an exception to be thrown.

/// Like Assert.Throws in NUnit.

/// </summary>

/// <param name="action">The action to execute</param>

/// <param name="message">The error message if the expected exception is not thrown</param>

/// <returns>The exception thrown by the action</returns>

public static Exception Throws(Action action, string message)

{

try

{

action();

}

catch (Exception ex)

{

// The action method has thrown the expected exception.

// Return the exception, in case the unit test wants to perform further assertions on it.

return ex;

}

// If we end up here, the expected exception was not thrown. Fail!

throw new AssertFailedException(message ?? "Expected exception was not thrown.");

}

/// <summary>

/// Executes an exception, expecting an exception of a specific type to be thrown.

/// Like Assert.Throws in NUnit.

/// </summary>

/// <param name="action">The action to execute</param>

/// <returns>The exception thrown by the action</returns>

public static T Throws<T>(Action action) where T : Exception

{

return Throws<T>(action, null);

}

/// <summary>

/// Executes an exception, expecting an exception of a specific type to be thrown.

/// Like Assert.Throws in NUnit.

/// </summary>

/// <param name="action">The action to execute</param>

/// <param name="message">The error message if the expected exception is not thrown</param>

/// <returns>The exception thrown by the action</returns>

public static T Throws<T>(Action action, string message) where T : Exception

{

try

{

action();

}

catch (Exception ex)

{

T actual = ex as T;

if (actual == null)

{

throw new AssertFailedException(message ?? String.Format("Expected exception of type {0} not thrown. Actual exception type was {1}.", typeof(T), ex.GetType()));

}

// The action method has thrown the expected exception of type 'T'.

// Return the exception, in case the unit test wants to perform further assertions on it.

return actual;

}

// If we end up here, the expected exception of type 'T' was not thrown. Fail!

throw new AssertFailedException(message ?? String.Format("Expected exception of type {0} not thrown.", typeof(T)));

}

}

好了,现在我们在MsTest中可以这样了,看下面代码:

复制代码 代码如下:

[TestMethod]

public void WriteToTextFile2()

{

//Implement Assert.Throws in MSTest

ExceptionAssert.Throws<ArgumentNullException>(()=> PDFUtility.WriteToTextFile("D:ACA.pdf", null)

,"Output file path should not be null");

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新asp.net教程学习
    热门asp.net教程学习
    编程开发子分类