Asp.net 编写有用的单元测试

Asp.net 编写有用的单元测试,asp.net,unit-testing,Asp.net,Unit Testing,我有一个带有网格的简单页面,我将对象集合绑定到该页面。我在网格上还有一些简单的功能来编辑和保存行。我想为这个页面编写单元测试,但这对我来说没有意义 例如: Private Sub LoadGrid() 'Populate Collection grid.datasource = MyCollection grid.databind() end sub 我猜Sub确实不需要单元测试,但是如果这是一个在网格加载时返回true的函数呢。如何为此编写单元测试?在这样一个简单的网页上还应该做什么测试 和

我有一个带有网格的简单页面,我将对象集合绑定到该页面。我在网格上还有一些简单的功能来编辑和保存行。我想为这个页面编写单元测试,但这对我来说没有意义

例如:

Private Sub LoadGrid()
'Populate Collection
grid.datasource = MyCollection
grid.databind()
end sub
我猜
Sub
确实不需要单元测试,但是如果这是一个在网格加载时返回true的函数呢。如何为此编写单元测试?在这样一个简单的网页上还应该做什么测试

和往常一样,感谢每一位提供任何意见的人

如何为此编写单元测试

第一步实际上是使表单可测试。看看如何分离UI层和BL层,实现MVC、MVP及其所有变体的方法大约有无数种,但没有一种真正的方法™ 去做吧。只要你的代码是健全和一致的,其他人就可以使用你的代码

我个人发现以下模式在大多数情况下都适用于测试UI:

  • 创建一个表示模型的接口
  • 为控制器创建一个类,用于处理模型的所有更新
  • 您的视图应该侦听对模型的更改
最后,你会得到这样的结果(对不起,我的VB fu已经生锈了,用C#来写):

在这里,视图和模型之间没有真正的区别——它们是同一个实体。这样做的目的是让你的代码尽可能地“愚蠢”,以便在控制器中包含尽可能多的可测试业务逻辑

在一台机器上还应该做什么测试 像这样简单的网页

您需要对任何形式的表单验证进行测试,您需要确保在异常情况下抛出异常,确保您的控制器方法以预期的方式更新您的模型,等等。

Juliet是正确的

你说的那行代码

'Populate Collection
这是可测试的部分。您可以对集合是否为null、是否有项以及是否正好有42项进行断言。但这将是一个集成测试

如果可以隔离对数据库的所有调用(返回datareader的部分),然后返回一个空的、假的DbDataReader,那么就可以测试UI和数据库之间的所有内容

启动浏览器并验证表是否呈现的测试,同样是一个集成测试,它将取决于IIS是否启动并工作(以及DB是否启动并工作,除非您有一个可以伪造的存储库)


如果您刚刚开始,我会首先查找所有易于测试的代码,例如对数据库有依赖关系的方法,然后继续进行需要模拟/存根/伪造数据库服务器的欺骗测试,等等。

我想Sub确实不需要单元测试。。你猜错了。+1-我不知道如何回答你的问题,因为我不使用或思考单元测试。然而,我也知道我应该像大多数项目的开发人员一样考虑它们。Slaks,Sub没有返回任何东西,你如何断言它的正确性?通常,如果函数没有返回任何东西,那么它会产生副作用或其他一些可见的状态变化。您可以编写一个测试断言验证您的任何副作用。
public class ProductPage : Page, IProductPageModel
{
    ProductPageController controller;

    public ProductPage()
    {
        controller = new ProductPageController(this);
    }

    public DataSet ProductDataSet
    {
        get { return (DataSet)myGrid.DataSource; }
        set { myGrid.DataSource = value; myGrid.DataBind(); }
    }

    protected void NavigateButton_OnCommand(object sender, CommandEventArgs e)
    {
        controller.NavigateTo(Convert.ToInt32(e.CommandArgument));
    }
}
'Populate Collection