UI逻辑单元测试

时间:2010-12-14 13:49:15

标签: c# asp.net asp.net-mvc unit-testing

我有几十个条件来检查七个或八个ui按钮启用属性的设置布尔值。

所以我为每个按钮设置了布尔变量(例如,isAction1Allowed,isAction2Allowed等。

我如何为这种情况编写单元测试?

目前,我有一个方法包含所有很好但不确定如何转换为单元测试的逻辑(请记住,对于MVC和单元测试非常新)

public void StateChecker() {  //This method resides in HtmlHelper
  bool isAllowed1 = false;
  bool isAllowed2 = false;
  bool isAllowed3 = false;

  if (condition1) {
    isAllowed1 = true;
  }
  else
  {
    isAllowed2 = true;
  }

  if (condition2) {
    isAllowed4 = true;
    isAllowed2 = true;
  }

// At the end of the method
Button1.Enabled = isAllowed1;
Button2.Enabled = isAllowed2;
Button3.Enabled = isAllowed3;

}

我必须打破这个方法吗?有没有更好的方法来做我想做的事情?记住,除了示例显示有更多的条件和按钮,但这是它的要点。基本上,它是一个小型工作流程或状态机。

谢谢, 杆

2 个答案:

答案 0 :(得分:3)

通常,您应该使用视图模型,这些视图模型是专门适合您的视图的类。这些类可能包含此类UI属性。控制器可以从域模型类中填充它们,因此您可以将它们作为任何其他类进行测试。

我个人使用AutoMapper在我的域模型类和我的视图模型之间进行转换,因此我对我负责此转换的mapper类进行单元测试。

答案 1 :(得分:0)

这是一种方式(使用可选模型):

  public YourModel{
    public bool IsAction1Allowed {get;set;}
    }

    public ActionResult Index(YourModel model = null){

    model = model ?? new Yourmodel();

    return View(model)
    }



 or (use public properties)




  public MyController:Controller{

    public bool IsAction1Allowed {get;set;}

   public ActionResult Index(){

    vare model = Yourmodel();
    model.IsAction1Allow = IsAction1Allowed

    return View(model)
    }



    }


or (use constructor)

   public MyController(Settings setting){


    public ActionResult Index(){

    vare model = Yourmodel();
    model.IsAction1Allow = settings.IsAction1Allowed

    return View(model)
    }

}