其他分享
首页 > 其他分享> > 可以断言代码块无法编译吗?

可以断言代码块无法编译吗?

作者:互联网

在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