使用C#为MSTest测试项目实现自定义断言
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C#为MSTest测试项目实现自定义断言相关的知识,希望对你有一定的参考价值。
前言
MSTest测试项目为我们实现了断言类Assert
,用于报告代码行为的正确性,比如:
var result = Calculator.Add(1,2);
Assert.AreEqual(3, result);
虽然常用的断言方法已经可以工作。
但是,我们更希望使用自定义断言,这样可以让我们的测试更易读。
实现
要为MSTest编写自定义断言,我们只要为Assert类编写扩展方法。
反编译Assert类的源代码,可以看到断言失败是通过抛出AssertFailedException来指示测试用例失败:
// Microsoft.VisualStudio.TestTools.UnitTesting.Assert
using System.Globalization;
internal static void HandleFail(string assertionName, string message, params object[] parameters)
string text = string.Empty;
if (!string.IsNullOrEmpty(message))
text = ((parameters != null) ? string.Format(CultureInfo.CurrentCulture, ReplaceNulls(message), parameters) : ReplaceNulls(message));
throw new AssertFailedException(string.Format(CultureInfo.CurrentCulture, FrameworkMessages.AssertionFailed, new object[2] assertionName, text ));
我们可以依葫芦画瓢。
例如,实现断言IsType<T>
,用于验证对象是否正是给定的类型:
internal static class AssertExtensions
public static void IsType<T>(this Assert assert, object obj)
if (obj is T)
return;
throw new AssertFailedException($@"Assert.That.IsType失败。不是指定的类型typeof(T)");
使用
Assert类提供了That
属性,可以获取Assert类的实例。
因此,只需在测试用例中用Assert.That
访问扩展方法即可:
[TestMethod]
public void TestMethod1()
Assert.That.IsType<Class1>("My IO");
结论
Assert.That
属性好像只有MSTest测试项目提供,没法为其它测试项目实现自定义断言。
如果你有实现方案,欢迎到公众号后台留言交流!
以上是关于使用C#为MSTest测试项目实现自定义断言的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致在单元测试(NUnit 或 MSTest)中从 C# 调用的 C++ 函数与在控制台应用程序中运行的相同代码产生不同的结果?