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