Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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 - Fatal编程技术网

C# 删除用户单元测试

C# 删除用户单元测试,c#,unit-testing,C#,Unit Testing,我是单元测试新手,我并不总是“看到”需要测试的内容。目前,我正在创建单元测试,以验证用户是否已从应用程序中删除 这是我到目前为止所拥有的。任何人都可以看看这一点,并提出一些建议,为其他事情进行测试,或者我已经涵盖了删除用户帐户的大部分内容 MembershipProvider prov = this.GetMembershipProvider(); MembershipCreateStatus status; Members

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

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

            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);

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

也就是说,您应该在每次状态更改后断言您的假设,因为正如所写的那样,您的方法并不能证明任何东西。从字面上说,每个方法都可以忽略所有输入参数并返回null,您的测试就会通过。在确定已删除该用户之前,首先要确保该用户存在

假设您的
会员资格提供商
具有如下实现:

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

有了这段代码,您的所有测试都会通过,并且您会认为应用程序的成员资格功能工作正常,而实际上它根本没有做任何事情。一般来说,查看单元测试是否有用的一个好方法是尝试打破它们。如果你可以让单元测试撒谎,那么你就写错了。

你应该检查
状态和
用户
是否是调用
CreateUser()
后所期望的

第一次调用
user=prov.GetUser(“UserX”,false)后
您应该检查
用户是否符合预期。例如,检查它是否不为null,用户名是否正确


不清楚
DeleteUser()
是否有返回值。如果是,则确保选中该值。

它看起来正常;在此之前,您应该有另一个创建用户并测试其创建是否正确谢谢。我知道,这是一项正在进行的工作。我陷入困境,想继续做其他事情。您可能希望找到应该失败的案例(即尝试删除不存在的用户),并确保它们以预期的方式失败。