C# UI逻辑单元测试
我有几十个条件来检查为七个或八个ui按钮启用属性设置布尔值 因此,我为每个按钮设置布尔变量(例如,isAction1Allowed、isAction2Allowed等) 我如何为这种情况编写单元测试 目前,我有一个方法,它包含了所有的逻辑,很好,但不确定如何转化为单元测试(请记住,MVC和单元测试非常新) 我必须打破这个方法吗?有没有更好的方法来完成我想做的事情?记住,这里的条件和按钮比示例中显示的要多得多,但这就是它的要点。基本上,它是一个小型工作流或状态机 谢谢,C# UI逻辑单元测试,c#,asp.net,asp.net-mvc,unit-testing,C#,Asp.net,Asp.net Mvc,Unit Testing,我有几十个条件来检查为七个或八个ui按钮启用属性设置布尔值 因此,我为每个按钮设置布尔变量(例如,isAction1Allowed、isAction2Allowed等) 我如何为这种情况编写单元测试 目前,我有一个方法,它包含了所有的逻辑,很好,但不确定如何转化为单元测试(请记住,MVC和单元测试非常新) 我必须打破这个方法吗?有没有更好的方法来完成我想做的事情?记住,这里的条件和按钮比示例中显示的要多得多,但这就是它的要点。基本上,它是一个小型工作流或状态机 谢谢, rod.通常,您应该使用视
rod.通常,您应该使用视图模型,这些模型是专门为您的视图调整的类。这些类可能包含这样的UI属性。由控制器从域模型类填充它们,以便您可以将它们作为任何其他类进行测试 就我个人而言,我通常在域模型类和视图模型之间进行转换,因此我需要对负责此转换的映射器类进行单元测试。这里有一种方法(使用可选模型): 表决—在ViewModel(或控制器,如果使用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;
}
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)
}
}