好吧。

所以我想是时候我得到单元的测试,因为人人都在敲打约有它足够长的时间。我已经安装了关和经过几个"介绍单元的测试"类型的教程。

我目前正在组建一个小型框架,帮助重建我们的一个网络应用程序,所以我已经创建了一个VS2008项目对我框架和我要单元的测试,它为我走了。

怎么做我去单元测试的支持此?该方法是所有受保护的或私有的,并且由于它是一个框架,没有很多别的,但支持此.

任何指点?

烧伤

有帮助吗?

解决方案

你可以做的模型图控制或模型视主持人的类型架构,而不使用一个完全成熟的框架。你已经发现了该单元的测试ui-组成部分是困难的。有办法绕过,但你可能不想走这条路。通常这会让你的测试非常困难的维持、更多的维护噩梦的是什么程序可以不用:-)

尝试分离出来的功能性你想来试验一个"控制器"或"主持人"类。然后测试。使它更加可测试你可以隐藏的用户控件类(图)背后有一个界面,使控制器或演讲者谈到通过接口。这样你可以嘲笑了鉴于你的测试。

我知道这听起来想了很多的工作,并且它似乎是一个解决方法,但如果得到用于此它是一个真美丽的建筑,使它更容易更改用户界面行为。你总是可以开始使用一个"真正的"软框架的时候你真的需要:-)

其他提示

Ues的 assembly:InternalsVisibleTo 属性,你将能够访问这些私人成员。

把它放在你的三夏精项目 程序集信息.cs (下 性能 节点)

[assembly:InternalsVisibleTo("YourTestProjectName")]

你已经找到了最大的痛苦点ASP.NET.尽密封的,私人类妨碍单元的测试。

这是最主要的原因,TDD人们将使用一个软框架(ASP.NET 视,城堡单轨铁路),因为它提供了一个明确的分离,从你的视图模板和你的控制器的逻辑。控制器是完全可测试的.

你也可以看看测试部件通过浏览器的用户将会看到他们使用的测试框架,例如 WebAii.我已经看到了它的工作和它很酷。我也一直告诉你,可以将其插入自动生成,但我没看出。

希望它能帮助...

是一个古老的文章通过了,但我还是使用NUnitASP写关测试asp.net 支持此在2004年。这篇文章提供了一个详细的例行测试一个简单的控制,使用其概念,创建一个相应的"测试"类封装的详细信息的控制从你的测试。测试者可以(应)也可在同大会为你的控制,所以可以分享一些东西它们之间(例如实用功能,常量,等)。

我使用的技术(和其他人使用的变体的技术)仍然今天,以测试非常复杂的控制。

我希望,是有帮助的。

该软框架上面提到的是最好的方式来测试什么的控制。但是检测它是如何工作的一点不同。

这完全是袖口但你可以让使用者控制获得某些受保护的方法和性质以返回确认信息然后有一个测试的用户控制的继承。控制可以填充的领域,按下按钮和什么不可以。一种杂乱,但是它可以工作。

你也可以看看这个 犀牛冰屋 框架。这是一个受到损害视框架web表单.

Ivonna 可以测试支持此在隔离内Asp.Net 上下文 只是电话会议。GetControl("的路径。ascx")和验证它拥有所有必要属性。

你测试了他们这样的:

[Test]
public void ConditionQueryBuilderTest_RendersProperHtml()
{
    var sw = new StringWriter();
    var queryBuilder = new ConditionQueryBuilderStub
    {
        ID = "UnitTestbuilder",
        QueryBuilderURL = @"\SomeAspxPage\SomeWebMethod",
        ResetQueryBuilderURL = @"\SomeAspxPage\OnQueryBuilderReset",
        FilterValuesCollection = new Dictionary<int, string> { {15, "Some Condition"}}
    };
    queryBuilder.RenderAllContents(new HtmlTextWriter(sw));

    AppendLog(sw.ToString());

    Assert.AreEqual(ExpectedHtml, sw.ToString()); // ExpectedHTML is the raw expected HTML
}

这里是我的短:

internal class ConditionQueryBuilderStub : ConditionQueryBuilder // ConditionQueryBuilder is a WebControl
{
    internal void RenderAllContents(HtmlTextWriter writer)
    {
        RenderContents(writer);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top