Han*_*ans 8 .net c# vb.net asp.net unit-testing
Fo单元测试ASP.NET控件我需要一个存根页面.
我可以通过继承System.Web.UI.Page在单元测试中创建一个ASP.NET页面对象.但是,我找不到设置Page.Form的方法.添加具有属性(runat,server)的表单不起作用.在我的子类中重载表单不会提供所需的功能.
上下文:我尝试对一些自制的ASP.NET控件进行单元测试.这些控件需要Page和Page.Form不能为空.
有什么建议?
尝试定义实现所需方法和属性的IPageand接口,并创建实现这些接口并包装 a或类的类。这样您就可以测试这些控件中的逻辑,而无需在单元测试期间调用 ASP.NET 框架。IFormPageForm
更新:
覆盖页面属性会很脆弱,并且是不可取的。相反,您应该尝试通过提取不依赖于任何 ASP.NET 特定(难以测试)部分的方法中的逻辑来最大程度地减少不可测试的代码量。看一下下面的例子:
public class MyLabel : Label
{
protected override override void RenderContents(HtmlTextWriter writer)
{
IPage page = new PageWrapper(this.Page);
this.MethodToTest(page);
base.RenderContents(writer);
}
internal void MethodToTest(IPage page)
{
// Work with IPage interface.
if (page.IsPostBack)
{
this.Text = string.Empty;
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过从难以测试的方法中提取逻辑,您可以直接在测试中调用这些提取的方法。例如:
[TestMethod]
public void MethodToTest_ScenarioToTest_ExpectedBehavior()
{
// Arrange
var label = new MyLabel();
var page = new TestPage()
{
IsPostBack = true
};
// Act
label.MethodToTest(page);
// Assert
Assert.IsTrue(string.Empty, label.Text);
}
Run Code Online (Sandbox Code Playgroud)
如果您能够将被测试的代码提取到它自己的类中并从您的 WebControl 中调用它,那就更好了。然而,这并不总是可能的。
我希望这是有道理的。
| 归档时间: |
|
| 查看次数: |
2333 次 |
| 最近记录: |