2015-09-24 114 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