我有几十个条件来检查七个或八个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;
}
我必须打破这个方法吗?有没有更好的方法来做我想做的事情?记住,除了示例显示有更多的条件和按钮,但这是它的要点。基本上,它是一个小型工作流程或状态机。
谢谢, 杆
答案 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)
}
}