2012-12-06 24 views
0

我有一个视图,它实现了一个接口。动态创建接口的成员

我想这个单元测试,但它很无聊......

的声明是:

public interface IView : IBaseView 
{ 
    TextBox ClientId { get; set; } 
    TextBox ClientName { get; set; } 
    Button SaveClient { get; set; } 
    Button NextClient { get; set; } 
    Button PreviousClient { get; set; } 
    Button DiscardChanges {get;set;} 
    bool ReadOnly { get; set; } 
    ListBox MyLittleList { get; set; } 
} 

    [Test] 
    public void FirstSteps() 
    { 
     var sessionFactory = Substitute.For<ISessionFactory>(); 
     var session = Substitute.For<ISession>(); 
     var statelessSession = Substitute.For<IStatelessSession>(); 
     sessionFactory.OpenSession().Returns(session); 
     sessionFactory.OpenStatelessSession().Returns(statelessSession); 

     var view = Substitute.For<IView>(); 

     view.ClientId = new System.Windows.Forms.TextBox(); 
     view.ClientName = new System.Windows.Forms.TextBox(); 
     view.DiscardChanges = new System.Windows.Forms.Button(); 
     view.MyLittleList = new System.Windows.Forms.ListBox(); 
     view.NextClient = new System.Windows.Forms.Button(); 
     view.PreviousClient = new System.Windows.Forms.Button(); 
     view.ReadOnly = false; 
     view.SaveClient = new System.Windows.Forms.Button(); 
    } 

有我一个视图动态做到这一点?

将视图传递给一个方法,它将验证那里是什么并自动调用构造函数并对其进行设置?

回答

1

林不完全确定你在找什么,但也许这可能有点帮助?​​:

public static void SetData<T>(T obj) 
{ 
    foreach (var property in typeof(T).GetProperties()) 
    if (property.CanWrite && property.GetIndexParameters().Length == 0) 
    { 
     object val = null; 

     //// Optionally some custom logic if you like: 
     //if (property.PropertyType == typeof(string)) 
     // val = "Jan-Peter Vos"; 
     //else 

     val = Activator.CreateInstance(property.PropertyType); 

     property.SetValue(obj, val, null); 
    } 
} 

[Test] 
public void FirstSteps() 
{ 
    // .. Your code .. 

    SetData(view); 
} 
+0

我想跟着干的原则。这只是一个观点。我会有更多。另一个视图有20个控件。但由于我对反思不太了解,所以我决定寻求帮助。我现在离开了我的开发者机器。只要我在上面,我可以测试,我会告诉你它是否工作。不管怎样,谢谢你。 –

+0

它似乎有效。 –