怎么才算让自己感到安全?覆盖逻辑,而不是代码。站在使用者的角度考虑,需要关心的是软件实现逻辑,而不是覆盖率。如下面的例子:
public class UserBusiness { public string CreateUser(User user) { string result = "success"; if (string.IsNullOrEmpty(user.Username)) { result = "usename is null or empty"; } else if (string.IsNullOrEmpty(user.Password)) { result = "password is null or empty"; } else if (user.Password != user.ConfirmPassword) { result = "password is not equal to confirmPassword"; } else if (string.IsNullOrEmpty(user.Creator)) { result = "creator is null or empty"; } else if (user.CreateDate == new DateTime()) { result = "createdate must be assigned value"; } else if (string.IsNullOrEmpty(user.CreatorIP)) { result = "creatorIP is null or empty"; } if (result != "success") { return result; } user.Username = user.Username.Trim(); user.Password = BitConverter.ToString(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(user.Password))); UserDataAccess dataAccess = new UserDataAccess(); dataAccess.CreateUser(user); return result; } } 在写UserBusiness.CreateUser的测试用例的时候,我们定义了下面几个单元测试用例: [TestClass()] public class UserBusinessTest { private TestContext testContextInstance; /// <summary> ///Gets or sets the test context which provides ///information about and functionality for the current test run. ///</summary> public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [TestMethod()] public void Should_Username_Not_Null_Or_Empty() { UserBusiness target = new UserBusiness(); User user = new User(); string expected = "usename is null or empty"; string actual = target.CreateUser(user); Assert.AreEqual(expected, actual); } [TestMethod()] public void Should_Password_Not_Null_Or_Empty() { UserBusiness target = new UserBusiness(); User user = new User() { Username = "ethan.cai" }; string expected = "password is null or empty"; string actual = target.CreateUser(user); Assert.AreEqual(expected, actual); } |