2013-05-28 60 views
0

好吧我正在写一个会员密码更改的测试。下面的代码是我到目前为止。我需要一些帮助来检查密码格式。最小字符长度为7,最大长度为8.测试密码格式

此外,我可以测试密码格式是否清晰,但是如何测试加密格式?

任何人都可以协助吗?

[TestMethod] 
    public void TestChangePassword() 
    { 
     try  
     { 
      AsaMembershipProvider prov = this.GetMembershipProvider(); 
      MembershipCreateStatus status; 

      //creates user 
      MembershipUser user = prov.CreateUser("testUserX", "12345", "[email protected]", "", "", true, null, out status); 

      //gets user 
      user = prov.GetUser("testUserX", false); 
      Assert.AreEqual(user.UserName, "testUserX"); 

      //Authenticates username and password 
      var isAuthenticated = prov.ValidateUser(user.UserName, "12345"); 
      Assert.IsTrue(isAuthenticated); 


      //changes password 
      prov.ChangePassword("testUserX", "12345", "ABCDE"); 

      //Validates password has been changed 
      prov.ValidateUser(user.UserName, "ABCDE"); 
      Assert.IsTrue(isAuthenticated); 

      // Change password back 
      prov.ChangePassword("testUserX", "ABCDE", "12345"); 

      //Validates password has been changed back 
      prov.ValidateUser(user.UserName, "12345"); 


      //Deletes User 
      prov.DeleteUser("testUserX", true); 
      //tries to get user again 
      user = prov.GetUser("testUserX", false); 
      //test that no user is returned 
      Assert.AreEqual(null, user); 

     } 
     catch (Exception ex) 
     { 
      LogMessage(ex); 
      Assert.Fail(ex.Message); 
     } 

    } 
+0

最大长度为8的密码?你为什么要限制它? – 1615903

+0

你说min的长度是7,但是你的测试全部少于7个字符。如前所述,绝对没有理由限制密码的最大长度。你将存储一个散列,而不是实际的密码(你是吧?),所以你甚至不会保存少量的磁盘空间,因为你的密码散列长度都是相同的。 – Sysyphus

回答

1

一个选择是编写扩展方法针对AsaMembershipProvider这将验证密码,然后从内部调用它ChangePassword做实际变化

这种方法的缺点是,你将有更多的代码保持

public static class CryptoExtensions { 

    public static void ChangePasswordEx(this AsaMembershipProvider mp, string username, string oldPassword, string newPassword){ 
     // validate format of the password 
     if (true /*validation code*/) 
     { 
      throw new Exception("Invalid password format"); 
     } 

     // rest of the code to encrypt and store the password 
     mp.ChangePassword(username, oldPassword, newPassword); 
    } 

} 

你的测试代码现在应该叫prov.ChangePasswordprov.ChangePasswordEx