0

几天前我有一个问题,询问“计算我的测试在 MembershipUserCollection 中找到的以“john”开头的用户名数量的最简单方法是什么?(测试应该找到 2 个用户名,johnUser1 和 johnUser2)

我收到以下来自 Garrison Neely 的评论

“两点:1)FindUsersByName是.NET框架中的一个方法。我认为没有必要对非自定义方法的功能进行单元测试2)如果你真的必须测试这个方法,添加像你这样的用户正在做,调用 GetAllUsers,然后循环或使用 LINQ 搜索所有 .StartsWith("john") 的用户名。

如何调用 GetAllUsers,然后使用 LINQ 搜索所有 .StartsWith("john") 的用户名?

[TestMethod]
public void TestFindUsersByName()
{
    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 = 1;
        int pageIndex=1;
        int totalRecords = 5;

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


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

        foreach (MembershipUser user in coll)
        {

            UserName.Add(user.UserName);
        }
        Assert.AreEqual(2, coll.Count);
        Assert.IsNotNull(UserName);


        Assert.IsTrue(UserName.Contains("johnUser1"));


        //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);
    }
}
4

1 回答 1

1
var allUsers = coll.GetAllUsers();

我不确定是否会为此完全实施 LINQ,所以这是我要尝试的 LINQ:

var johns = allUsers.Where(user => user.UserName.ToLower().StartsWith("john");

然后,您可以检查 johns.Count(),或以任何原因对其进行迭代。

如果该代码不起作用,请尝试

var johns=new List<MembershipUser>();
foreach(var membershipUser in allUsers)
{
    if(membershipUser.UserName.ToLower().StartsWith("john"))
    {
        johns.Add(membershipUser);
    }
}

然后 johns 将填充适用的 john 数据。

于 2013-06-11T19:44:51.520 回答