删除用户单元测试

时间:2013-05-13 21:42:59

标签: c# unit-testing

我是单元测试的新手,我并不总是“看到”需要测试的内容。目前我正在创建单元测试以验证用户是否已从应用中删除。

这是我到目前为止所拥有的。任何人都可以看看这个,并为其他测试事项提出一些建议,或者我为删除用户帐户覆盖了大部分内容?

            MembershipProvider prov = this.GetMembershipProvider();
            MembershipCreateStatus status;
            MembershipUser user = prov.CreateUser("UserX", "12345", "test.UserX@abc.com", "", "", true, null, out status);

            //call get user
            user = prov.GetUser("UserX", false); 

            //Deletes user and all related information
            prov.DeleteUser("UserX", true);

            // Try to retrieve user again
            user = prov.GetUser("UserX", false);

            //test to see if user has been deleted
            Assert.AreEqual(null, user);

2 个答案:

答案 0 :(得分:1)

这似乎更像是集成测试,而不是单元测试。我这样说是因为我假设GetUserDeleteUser方法进行数据库调用。因此,有多个单元在起作用,包括:创建用户对象,将用户对象持久化到数据库,删除用户对象,以及尝试检索用户对象。

话虽这么说,你应该在每次状态改变后断言你的假设,因为你写的方法不能证明什么。从字面上看,每个方法都可以忽略所有输入参数并返回null - 并且您的测试将通过。您可能希望确保用户首先存在,然后才能确定您已将其删除。

想象一下,您的MembershipProvider的实施方式如下:

    public class CustomMembershipProvider : MembershipProvider
    {
          public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, stringpasswordAnswer , bool isApproved, object providerUserKey, ref MembershipCreateStatus  status)
          {
              status = default(MembershipCreateStatus);
              return default(MembershipUser);
          }          

          public override MembershipUser GetUser(string username, bool login)
          {
              return default(MembershipUser);
          }

          public override bool DeleteUser(string username, bool deleteRelatedData)
          {
              return default(bool);
          }
     } 

使用此代码,您的所有测试都会通过,并且当您实际上根本不执行任何操作时,您会想到应用程序的成员身份功能正常工作。一般来说,一个很好的方法来判断你的单元测试是否有用,就是试图打破它们。如果你可以让你的单元测试谎言,那你写错了。

答案 1 :(得分:1)

您应该在致电status后检查userCreateUser()是否符合预期。

首次致电user = prov.GetUser("UserX", false);后,您应该检查user是否符合预期。例如,检查它是否为空且用户名是否正确。

目前尚不清楚DeleteUser()是否有返回值。如果是,请确保检查该值。