C# 为引用UI控件的类编写单元测试
我有一个用户控件继承自的抽象类,我想为其编写单元测试。我知道我需要创建一个模拟类来测试抽象类。抽象类具有对UI控件的引用(例如:将web控件作为参数的基本方法)。我的问题是,如何为引用System.Web.UI命名空间中控件的任何方法编写单元测试 谢谢 编辑: 下面是我的代码示例C# 为引用UI控件的类编写单元测试,c#,.net,asp.net,unit-testing,C#,.net,Asp.net,Unit Testing,我有一个用户控件继承自的抽象类,我想为其编写单元测试。我知道我需要创建一个模拟类来测试抽象类。抽象类具有对UI控件的引用(例如:将web控件作为参数的基本方法)。我的问题是,如何为引用System.Web.UI命名空间中控件的任何方法编写单元测试 谢谢 编辑: 下面是我的代码示例 public abstract SpecialUserControl : System.Web.UI.UserControl { protected virtual void DoSomething(TextB
public abstract SpecialUserControl : System.Web.UI.UserControl
{
protected virtual void DoSomething(TextBox txtBoxName)
{
//Here's the logic I want to write unit test for
}
}
在ascx.cs中
public partial class MyUsercontrol : SpecialUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
base.DoSomething( txtBoxName );
}
}
在aspx.cs中
public partial class SomePage : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
//Dynamically loaded
LoadControl("MyUserControl.ascx");
}
}
根据我对您的问题的理解,您将需要为抽象派生类创建一个控件来进行初始化。因此,您需要创建一个具体的类来测试您的抽象类;您还需要模拟用于初始化自身的web控件(来自您的示例)。我的回答是“是什么阻止您编写这些测试?”(我需要更多的代码上下文来给出更详细的答案) 对待它们就像对待代码的任何其他协作者/依赖项一样。如果UI控件很容易在测试套件中创建,那么您只需继续并设置它们的状态,对它们进行操作并声明您的期望值。
如果UI控件不容易创建或创建成本不高,那么可以使用一个接口(只包含与控件交互的方法)将它们抽象出来&插入mock/fake/stub实现
我还想补充一点,让UI尽可能精简。为了测试的目的,您可以尝试创建这些web控件的实例,如果不可能的话,也可以对它们进行模拟。如果您预见到需要多组单元测试的实体模型,请毫不犹豫地花时间 如果您的代码只依赖于接口而不是具体的类,那么就更容易了,因为这样您就可以只模拟一个接口,而不必模拟整个类 如果在代码和System.Web.UI控件之间有一些抽象层,那么就更容易了。这可能会使测试和维护更容易 我想我的观点是,有一种设计代码是可单元测试的 如果你给出一个更具体的场景,可能会有更具体的建议