ASP.NET-如何对WebControl进行单元测试?

时间:2020-03-05 18:44:06  来源:igfitidea点击:

好吧。

因此,我认为现在是我进行单元测试的时候了,因为每个人都在为此进行了足够长的研究。我已经安装了NUnit,并完成了一些"单元测试简介"类型的教程。

我目前正在整理一个小的框架来帮助我们的一个Web应用程序的重建,所以我为框架创建了一个VS2008项目,我想对它进行单元测试。

我到底该如何对WebControl进行单元测试?这些方法都是受保护的或者私有的,并且由于它是一个框架,因此除了WebControls之外,没有什么别的了。

有指针吗?

烧伤

解决方案

回答

使用Assembly:InternalsVisibleTo属性,我们将能够访问那些私有成员。

将其放在Web控制项目的AssemblyInfo.cs中(在"属性"节点下)

[assembly:InternalsVisibleTo("YourTestProjectName")]

回答

我们已经发现ASP.NET的最大痛点。就密封而言,私有类阻碍了单元测试。

这是TDD人员将使用MVC框架(ASP.NET MVC,Castle MonoRail)的主要原因,因为它提供了与视图模板和控制器逻辑的清晰区分。控制器是完全可测试的。

回答

我们可以使用模型视图控制器或者模型视图演示者类型的体系结构,而无需使用完整的框架。我们已经发现对ui组件进行单元测试很困难。有很多解决方法,但是我们可能不想走那条路。通常,这将使测试很难维护,而更多的维护噩梦是程序员无法做到的:-)

尝试在"控制器"或者"演示者"类中分离出要测试的功能。然后测试该课程。为了使其更具可测试性,我们可以将usercontrol类(视图)隐藏在界面后面,并使控制器或者演示者通过该界面与该视图对话。这样,我们可以在测试中模拟视图。

我知道这听起来像是很多工作,而且似乎是一种解决方法,但是如果我们习惯了它,那么它是一个非常好的架构,可以很容易地更改ui行为。当我们确实需要它时,我们总是可以开始使用"真正的" mvc框架:-)

回答

上面提到的MVC框架是测试控件功能的最佳方法。但是测试它的工作方式有点不同。

这完全没有用,但是我们可以使用户控件公开一些受保护的方法和属性以返回验证信息,然后让测试用户控件继承该信息。该控件可以填充字段,按下按钮,然后不填充其他内容。有点凌乱,但它可以工作。

回答

我们也可以看看这个Rhino Igloo框架。它是针对WebForms的已破坏的MVC框架。

回答

到目前为止,这是一篇老文章,但是我在2004年使用NUnitASP编写了用于asp.net WebControls的nunit测试。该文章提供了使用其概念创建一个简单的控件的详细示例,该控件创建了一个相应的" Tester"类来封装测试中控件的详细信息。测试仪还可以(应该)与控件位于同一程序集中,因此可以在它们之间共享某些内容(例如,实用程序功能,常量等)。

我今天仍然使用该技术(其他人使用该技术的变体)来测试非常复杂的控件。

希望对我们有所帮助。

回答

伊万娜
可以在Asp.Net上下文中隔离测试WebControl
只需调用session.GetControl(" Path.ascx")并验证它具有所有必需的属性即可。

回答

我们还可以通过浏览器查看测试组件,就像用户使用WebAii这样的测试框架看到它们一样。我已经看到了它的工作原理,并且非常酷。我还被告知我们可以将其插入自动化版本,但到目前为止还没有看到。

希望能帮助到你 ...