可以断言代码块无法编译吗?
作者:互联网
在MS Test中,有没有办法断言代码块无法编译?假设我有一个想要成为单身人士的对象.我可能想确保此对象没有公共构造函数.有没有办法做这样的事情?
Action create = { new Logger("abc.txt") };
Assert.CompilerError(create);
我可以使用反射来做到这一点,但我很好奇是否有一种方法可以断言代码实际上并未编译.这是我使用反射的方法:
[TestMethod]
public void OnlyPrivateConstructors()
{
var flags = (System.Reflection.BindingFlags)int.MaxValue; //all flags
var constructors = typeof(Logger).GetConstructors(flags);
foreach (var item in constructors)
{
Assert.IsTrue(item.IsPrivate);
}
}
解决方法:
MS测试运行已编译的代码.如果代码无法编译,则无法对其进行测试.
通过使用有问题的代码块创建一个字符串,然后要求Roslyn对其进行编译,大概可以使用Roslyn进行此操作.
http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx
在roslyn之前,您可以创建一个包含代码块的文件,然后使用System.Diagnostics.Process之类的文件对它运行csc,但是这样做的麻烦多于其应有的价值.
我会坚持思考,但是由于内部或受保护的构造函数也将允许违反单例模式,因此我将声明Assert.IsTrue(item.IsPrivate).
我还将对Assert.IsTrue(typeof(Logger).IsSealed)进行测试.我想有些皮带和吊带,但确实存在.
标签:assert,mstest,c 来源: https://codeday.me/bug/20191121/2050408.html