2011-12-20 78 views
0

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

我该怎么做?

在此先感谢Tobi

+0

你尝试过什么?你知道如何使用反射来获取所有的域类和属性吗? – 2011-12-20 15:11:34

+0

@WouterdeKort其实我现在不知道。我在反思方面玩过,但不是那样。 – Tobias 2011-12-20 15:12:57

回答

1

我已经改编了一个类似的案例我有一个代码,这应该让你去;

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 = Test<User>(); 
+0

为什么?这是你建立会话工厂时完成的。如果无法创建会话工厂,则应用程序不会(不应该)启动。如果你真的想要一个测试,只需建立一个内存中的sqlite数据库的会话工厂。如果没有抛出异常,则所有实体都具有虚拟成员。 – 2011-12-20 16:31:06

3

没有必要,只需建立会话工厂。如果属性不是虚拟配置,会抛出详细的消息,告诉你什么是错的。

+0

什么是会话工厂? – SvenG 2011-12-20 15:17:44

+0

它是NH的核心。这是你如何打开一个会话。你有配置,会话工厂和会话。配置建立会话工厂(singleton),工厂创建会话(transient) – 2011-12-20 16:27:57