2015-09-24 63 views
1

我有一个方法,它接受用户ldap角色并根据网站web.config文件中名为“ValidRoles”的列表评估他/她的每个角色。为了测试的目的,我们将假设用户角色在不同的用户中保持不变。单元测试场景

现在我想欺骗的方法进入一个不同的列表(而不是我的web.config中的一个)来比较和当我运行我的单元测试。 我该怎么做?我是单元测试新手。我很欣赏任何建议。下面显示了我正在测试的方法,web.config中的ValidRoles和现有的单元测试。

private bool IsValidClaimStationRoles() 
    { 
     foreach (string role in RoleList) 
     { 
      if (role != null) 
      { 
       if (ValidRoleList.Contains(role.ToUpper())) 
       { 
        return true; 
       } 
      } 
     } 
     return false; 

//从web.config中的有效角色

<add key="ValidRoles" value="C-2,CP-1,CM-1,CIS-1,CID-1"/> 

//单元测试

 [TestMethod()] 
    [DeploymentItem("ClaimsDocMgmtLinkWeb.dll")] 
    public void IsValidClaimStationRolesTest_Negative() 
    { 

     AuthenticateUser_Accessor target = new AuthenticateUser_Accessor(); // TODO: Initialize to an appropriate value 
     target.CreateTicket(); 
     bool expected = false; 
     bool actual; 



     actual = target.IsValidClaimStationRoles(); 
     Assert.AreEqual(expected, actual); 

    } 
+1

查看嘲弄(MOQ)或伪造(Fakes)。这样可以伪装某些对测试方法所必需的对象和方法。 – Marko

+1

是不同项目中的测试吗?通常测试项目可以有自己的配置文件 – tim

+0

是的。实际上这些测试是在一个不同的.NET解决方案中。 – Jazzcatone

回答

1

在这里你的单元测试场景将失败,因为大多会RoleList不存在。实际方法根据存在于RoleList集合中的角色列表进行验证。

您应该重构您的功能并让它接受RoleList参数,然后您可以传递假角色并测试您的方法。我正在谈论它Dependency Injection在这里。

private bool IsValidClaimStationRoles(RoleList roles) 
    { 
     // do processing code 
    } 
+0

嗨劳尔。感谢您的反馈。不幸的是,如果我不需要,我不想在我测试的方法中触摸代码。 – Jazzcatone