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_Exception_Asp.net Membership - Fatal编程技术网

C# 测试期间引发异常,导致项已添加到字典中

C# 测试期间引发异常,导致项已添加到字典中,c#,unit-testing,exception,asp.net-membership,C#,Unit Testing,Exception,Asp.net Membership,我试图执行这个测试方法,但它抛出了一个异常。当我逐步通过代码尝试隔离异常时,它会导致我: public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) 试验方法如下所示。异常在这里抛出,并显示以下消息 "Item has already been added. Key in dictionar

我试图执行这个测试方法,但它抛出了一个异常。当我逐步通过代码尝试隔离异常时,它会导致我:

public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) 
试验方法如下所示。异常在这里抛出,并显示以下消息

"Item has already been added. Key in dictionary: 'john'  Key being added: 'john'". 
我不知道从这里到哪里去。有人能给我指出正确的方向吗?此外,我的测试方法仍在使用中,因此如果您看到任何错误,除非这些错误直接导致抛出异常,否则请忽略它们

    [TestMethod]
    public void TestFindUsersByName()// filed a bug in TFS
    {
        try
        {

            //set test to create user 
            MembershipProvider prov = this.GetMembershipProvider();
            MembershipCreateStatus status;
            //creates users
            MembershipUser user1 = prov.CreateUser("johnUser1", "12345", "johnUser1@asc.edu", "", "", true, null, out status);
            MembershipUser user2 = prov.CreateUser("johnUser2", "12345", "johnUser2@asc.edu", "", "", true, null, out status);

            //gets users
            user1 = prov.GetUser("johnUser1", false); //not checking if user is online. Argument should be false. Not yet implemented 
            user2 = prov.GetUser("johnUser2", false);

            int pageSize = 5;
            int pageIndex = 0;
            int totalRecords = 5;

            MembershipUserCollection coll = prov.FindUsersByName("john", pageIndex, pageSize, out totalRecords);

            Assert.AreEqual(1, coll.Count);

            List<string> usernames = new List<string>();

            foreach (MembershipUser user in coll)
            {
                usernames.Add(user.UserName);

            }

            Assert.IsNotNull(usernames);
            //Assert.IsTrue(usernames.Contains("john"));


            //Deletes Users
            prov.DeleteUser("johnUser1", true);
            prov.DeleteUser("johnUser2", true);

            //Tries to get users again
            user1 = prov.GetUser("johnUser1", false);
            user2 = prov.GetUser("johnUser2", false);

            //test that no users are returned
            Assert.AreEqual(null, user1);
            Assert.AreEqual(null, user2);

        }

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


 // MembershipProvider.FindUsersByName       
    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        MembershipUserCollection users = new MembershipUserCollection();

        try
        {
            Profile.MembershipMapper memberMapper = new MembershipMapper();
            List<Profile.Membership> recs = (List<Profile.Membership>)memberMapper.GetMembershipsByUsername(_memberUtil.GetApplicationId(), usernameToMatch, pageIndex, pageSize, out totalRecords);

            foreach (Profile.Membership rec in recs)
            {
                users.Add(GetUserFromModel(rec, usernameToMatch));
            }
        }
        catch (Exception ex)
        {
            Exception e = CheckEventLog(ex, "FindUsersByName");
            throw e;
        }

        return users;
    }


 private MembershipUser GetUserFromModel(Profile.Membership membership, string username)
    {
        MembershipUser u = new MembershipUser(this.Name, 
            username,
            membership.userId,
            membership.email,
            "",
            "",
            true,
            false,
            this.GetDate(membership.createDate),
            this.GetDate(membership.lastLoginDate),
            this.GetDate(null),
            this.GetDate(membership.lastPasswordChangedDate),
            this.GetDate(null));

        return u;
    }
[TestMethod]
public void testFindUserByName()//在TFS中提交了一个错误
{
尝试
{
//设置测试以创建用户
MembershipProvider prov=this.GetMembershipProvider();
成员资格和状态;
//创建用户
MembershipUser user1=prov.CreateUser(“johnUser1”、“12345”、“12345”)johnUser1@asc.edu“,”,”,true,null,out状态);
MembershipUser user2=prov.CreateUser(“johnUser2”、“12345”和johnUser2@asc.edu“,”,”,true,null,out状态);
//获取用户
user1=prov.GetUser(“johnUser1”,false);//不检查用户是否联机。参数应为false。尚未实现
user2=prov.GetUser(“johnUser2”,false);
int pageSize=5;
int pageIndex=0;
int totalRecords=5;
MembershipUserCollection coll=prov.FindUsersByName(“john”,pageIndex,pageSize,out totalRecords);
Assert.AreEqual(1,coll.Count);
列表用户名=新列表();
foreach(coll中的MembershipUser用户)
{
usernames.Add(user.UserName);
}
Assert.IsNotNull(用户名);
//Assert.IsTrue(usernames.Contains(“john”));
//删除用户
prov.DeleteUser(“johnUser1”,真实);
prov.DeleteUser(“johnUser2”,真实);
//尝试再次获取用户
user1=prov.GetUser(“johnUser1”,false);
user2=prov.GetUser(“johnUser2”,false);
//测试是否没有返回任何用户
arenequal(null,user1);
arenequal(null,user2);
}
捕获(例外情况除外)
{
日志信息(ex);
断言失败(例如消息);
}
}
//MembershipProvider.FindUserByName
public override MembershipUserCollection FindUserByName(字符串UserName匹配、int pageIndex、int pageSize、out int totalRecords)
{
MembershipUserCollection用户=新建MembershipUserCollection();
尝试
{
Profile.MembershipMapper memberMapper=new MembershipMapper();
List recs=(List)memberMapper.GetMembershipsByUsername(_memberUtil.GetApplicationId(),usernameToMatch,pageIndex,pageSize,out totalRecords);
foreach(记录中的Profile.Membership记录)
{
添加(GetUserFromModel(rec,usernameToMatch));
}
}
捕获(例外情况除外)
{
异常e=检查事件日志(例如,“FindUserByName”);
投掷e;
}
返回用户;
}
私有成员身份用户GetUserFromModel(Profile.Membership成员身份,字符串用户名)
{
MembershipUser u=新的MembershipUser(this.Name,
用户名,
membership.userId,
membership.email,
"",
"",
是的,
假,,
这个.GetDate(membership.createDate),
此.GetDate(membership.lastloginandate),
此.GetDate(null),
this.GetDate(membership.lastPasswordChangedDate),
这个.GetDate(null));
返回u;
}

如果您的任何成员资格提供程序对象是静态的或共享引用,并且您正在多个测试中添加“john”用户,那么当测试以并行/多线程方式执行时,您就有了竞争条件。要解决此问题,您必须配置一个测试设置/拆卸,以清除每个测试的数据结构,并按顺序执行它们,或者将这些对象包装在一个自定义对象中,该对象编程到一个可以模拟的接口。

您不能在MembershipUserCollection中存储多个同名用户。 它按用户名编制索引,因此可以防止您为每个名称添加多个MembershipUsers


问题出在GetUserFromModel()方法中。它使用搜索名称作为用户名称,因为它正在查找名称中包含“john”的2个用户,它正在创建用户名为“john”的2个用户。它可能应该使用他们的原始用户名,而不是用于搜索的部分用户名。

我想到了多个同名“John”的用户。然而,“约翰”在这个测试中是独一无二的。“John”的信息被添加到数据库中,然后是我得到的错误消息。我应该仍然使用建议的解决方案吗?您的单元测试不应该修改您的数据库!!您需要模拟安全对象并以您希望的方式“欺骗”响应,而不是依赖DB进行测试!我是测试新手,在项目启动后很早就加入了这个项目。该数据库专门用于测试。我已经读到应该使用嘲弄,但目前我正在处理我所得到的东西。关于如何解决这个问题,我还有其他建议吗?表格开始时,用户名中没有“John”的所有用户,但是没有完全清除。我删除为用户John添加的记录,然后重试。我得到同样的错误,你的工作流程或逻辑中一定有错误,这种情况才会发生。继续查找。我正在添加两个用户,johnUser1和johnUser2。我正在搜索用户名中带有“John”的所有用户GetUserFromModel是否返回正确的MembershipUser?不知何故,MemberShipUserCollection.Add()被调用了两次,调用的名称相同。此外,MembershipMapper是否返回了重复项?是的。我相信你