C# 虚拟属性的单元测试

C# 虚拟属性的单元测试,c#,unit-testing,reflection,C#,Unit Testing,Reflection,由于NHibernate中的延迟加载,我必须确保我的域的每个属性都是虚拟的。 我希望通过编写一个单元测试来检查每个反射,确保特定命名空间中所有类的所有公共属性都是虚拟的 我该怎么做 提前感谢Tobi无需,只需构建会话工厂即可。如果属性不可用,虚拟配置将抛出一条详细消息,告诉您出了什么问题。无需,只需构建会话工厂即可。如果属性不是虚拟的,则配置将抛出一条详细消息,告诉您出了什么问题。我已经改编了一段类似案例中的代码,这应该可以让您继续 public static bool Test<

由于NHibernate中的延迟加载,我必须确保我的域的每个属性都是虚拟的。 我希望通过编写一个单元测试来检查每个反射,确保特定命名空间中所有类的所有公共属性都是虚拟的

我该怎么做


提前感谢Tobi

无需,只需构建会话工厂即可。如果属性不可用,虚拟配置将抛出一条详细消息,告诉您出了什么问题。

无需,只需构建会话工厂即可。如果属性不是虚拟的,则配置将抛出一条详细消息,告诉您出了什么问题。

我已经改编了一段类似案例中的代码,这应该可以让您继续

    public static bool Test<T>()
    {
        var valid = true;

        foreach (var property in typeof(T).GetProperties())
        {
            var accessor = property.GetAccessors()[0];
            if (accessor.IsVirtual)
                continue;

            Console.WriteLine("Member " + typeof(T).Name + "." + property.Name + " is not virtual");
            valid = false;
        }

        return valid;
    }
公共静态布尔测试()
{
var valid=true;
foreach(typeof(T).GetProperties()中的var属性)
{
var accessor=property.GetAccessors()[0];
if(accessor.IsVirtual)
继续;
Console.WriteLine(“成员”+typeof(T.Name+”+property.Name+“不是虚拟的”);
有效=错误;
}
返回有效;
}
您可以这样使用:

var valid = Test<User>();
var valid=Test();

我已经从一个类似的案例中改编了一段代码,这应该会让你继续

    public static bool Test<T>()
    {
        var valid = true;

        foreach (var property in typeof(T).GetProperties())
        {
            var accessor = property.GetAccessors()[0];
            if (accessor.IsVirtual)
                continue;

            Console.WriteLine("Member " + typeof(T).Name + "." + property.Name + " is not virtual");
            valid = false;
        }

        return valid;
    }
公共静态布尔测试()
{
var valid=true;
foreach(typeof(T).GetProperties()中的var属性)
{
var accessor=property.GetAccessors()[0];
if(accessor.IsVirtual)
继续;
Console.WriteLine(“成员”+typeof(T.Name+”+property.Name+“不是虚拟的”);
有效=错误;
}
返回有效;
}
您可以这样使用:

var valid = Test<User>();
var valid=Test();

您尝试过什么?你知道如何使用反射来获取其中的所有域类和属性吗?@WouterdeKort事实上我现在不知道。我玩弄反射,但不是那样。你试过什么?你知道如何使用反射来获取其中的所有域类和属性吗?@WouterdeKort事实上我现在不知道。我玩弄反射,但不是那样。它是NH的核心。这就是你如何打开一个会话。您有配置、会话工厂和会话。配置构建会话工厂(单例),工厂创建会话(瞬态),这是NH的核心。这就是你如何打开一个会话。您有配置、会话工厂和会话。配置构建会话工厂(单例),工厂创建会话(瞬态)为什么?这是在构建会话工厂时为您完成的。如果无法创建会话工厂,应用程序将不会(不应该)启动。如果确实需要测试,只需针对内存中的sqlite数据库构建会话工厂。如果没有引发异常,则所有实体都有虚拟成员。为什么?这是在构建会话工厂时为您完成的。如果无法创建会话工厂,应用程序将不会(不应该)启动。如果确实需要测试,只需针对内存中的sqlite数据库构建会话工厂。如果未引发异常,则所有实体都具有虚拟成员。