c# - 如何检查一个类的所有公共(public)方法都是虚拟的

标签 c# .net nunit nservicebus

在.net项目中,有很多用C#实现的实体。使用的库(saga实体的nservicebus)的要求是所有访问方法都必须声明为公共(public)和虚拟的,否则在部署过程中会失败。

在单元测试阶段检查实体的访问方法是否虚拟是合理的,s.a.部署可能需要很长时间(在被发现之前)

有谁知道一种好方法来检查类中的所有公共(public)方法是否在 nunit 测试中声明为虚拟方法?

最佳答案

我使用相同的测试来验证,游戏引擎包装器将所有公共(public)方法都作为虚拟方法。它使测试变得更加容易,并且可以大大减少反馈时间。我将此类方法放置在特殊类 DesignTests 下,例如,我在其中测试我的项目中是否违反了约定。有些复杂的事情是 FxCop 无法检测到的。您可以看到下面的代码:

[Test]
public void AllPublicMethodsInUnityFacade_ShouldBeVirtual()
{
    var allPublicMethods = 
        typeof(UnityFacade).GetMethods(BindingFlags.DeclaredOnly |
                                       BindingFlags.Instance |
                                       BindingFlags.Public);

    Assert.IsTrue(allPublicMethods.All(method => method.IsVirtual),
                  string.Join(", ", allPublicMethods
                                        .Where(method => !method.IsVirtual)
                                        .Select(method => method.Name)) 
                                     + " is not virtual");

}

关于c# - 如何检查一个类的所有公共(public)方法都是虚拟的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14358652/

相关文章:

扩展方法中的 C# 操作参数

c# - 如何显示来自另一个线程的表单

c# - 将一种语言的语音转换为另一种语言

.net - 休眠级联

c# - 无法将类型为 'System.Data.ProviderBase.DbConnectionClosedConnecting' 的对象转换为类型“System.Data.SqlClient.SqlInternalConnectionTds

c# - Nant 和 Nunit2 的问题

c# - DevExpress ComboBoxEdit 数据源

asp.net - 如何将 NUnit 与 ASP.NET 网站(不是 Web 项目)一起使用?

c# - log4net 和 nunit 测试,最基本的例子

c# - 使用 "using"语法时出现流关闭错误