Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试密码格式_C#_Unit Testing_Passwords_Membership Provider - Fatal编程技术网

C# 测试密码格式

C# 测试密码格式,c#,unit-testing,passwords,membership-provider,C#,Unit Testing,Passwords,Membership Provider,好的,我正在写一个会员密码更改测试。下面的代码是我到目前为止的代码。我需要一些帮助来检查密码格式。最小字符长度为7,最大长度为8 此外,我可以测试密码格式是否清晰,但如何测试加密格式 有人能帮忙吗 [TestMethod] public void TestChangePassword() { try { AsaMembershipProvider prov = this.GetMembershipProv

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

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

有人能帮忙吗

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

            //creates user
            MembershipUser user = prov.CreateUser("testUserX", "12345", "test.UserX@abc.com", "", "", 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);
        }

    }

一种选择是编写一个以MembershipProvider为目标的扩展方法,该方法将验证密码,然后从密码中调用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.ChangePasswordExprov.ChangePassword

密码的最大长度为8?为什么要限制它呢?你说最小长度是7,但是你的测试都少于7个字符。如前所述,绝对没有理由限制密码的最大长度。您将存储一个散列,而不是实际的密码(您是,对吗?),因此您甚至不会保存极小的磁盘空间,因为您所有的密码散列都是相同的长度。