【问题标题】:UI logic unit testUI逻辑单元测试
【发布时间】:2010-12-14 13:49:14
【问题描述】:

我有几十个条件来检查是否为七个或八个 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;

}

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 投票 - 在 ViewModel(或使用 MVC 的控制器)中尽可能多的逻辑,并使用绑定来根据控制器中的值设置按钮的状态。然后可以对控制器进行单元测试。
    【解决方案2】:

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

      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)
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      相关资源
      最近更新 更多