单元在ASP.NET中测试登录
我对TDD很新,我在单元测试中遇到了麻烦.我似乎无法理解下一步该做什么. :(我正在尝试对我的一个名为AccountService的服务进行单元测试,我正在测试一个名为DoLogin的方法(用户名,密码).这是一些示例代码:
[Test] public void User_With_Correct_Username_And_Pass_Should_Login_Successfully() { // Arrange var accountService = new AccountService(); // Act bool result = accountService.DoLogin("test","test"); // Assert Assert.IsTrue(result); } public class AccountService : IAccountService { public bool DoLogin(string username,string password) { if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) return false; return true; } } 所以这个测试过去但现在我该怎么办?!如果发生有效登录,我该如何测试呢?我是否需要实现集成测试并针对实际或内存数据库测试登录?对不起,如果我做的事情完全不正确.我真的希望有一天得到这个TDD的东西.谢谢 解决方法
你的经历非常类似于我的开始.虽然我在TDD上出售并且不会做任何不同的事情,但我当然理解你的困惑.重要的是要记住TDD是一种设计理念.话虽如此,我想我可以帮助澄清你的一些挫折感.
>首先考虑一下你想要完成什么,而不是考虑个人测试水平,但是你想要做什么.如果您的任务(用户故事)涉及获取某些凭据并尝试根据这些凭据对当前用户进行身份验证,那么请从那里开始并逐步完成.你似乎正朝着这个方向前进,只会陷入下一步 好吧,所以把这一切都放在你的例子和一些很好的test cases from lance,我们可以做这样的事情: [Test] public void ShouldAuthenticateValidUser() { IMyMockDa mockDa = new MockDataAccess(); var service = new AuthenticationService(mockDa); mockDa.AddUser("Name","Password"); Assert.IsTrue(service.DoLogin("Name","Password")); //Ensure data access layer was used Assert.IsTrue(mockDa.GetUserFromDBWasCalled); } [Test] public void ShouldNotAuthenticateUserWithInvalidPassword() { IMyMockDa mockDa = new MockDataAccess(); var service = new AuthenticationService(mockDa); mockDa.AddUser("Name","Password"); Assert.IsFalse(service.DoLogin("Name","BadPassword")); //Ensure data access layer was used Assert.IsTrue(mockDa.GetUserFromDBWasCalled); } 好的,那里有很多事情要做,也许很多需要研究.但是,您可以开始了解如何使用更好的设计进行全面测试.在上面的示例中,重要的是要注意Mock对象是自定义滚动的,但您不必经历所有这些痛苦.那里有许多模拟框架.例如,使用RhinoMocks,您的测试将如下所示: [Test] public void ShouldAuthenticateValidUser() { var mockRepo = new MockRepository(); var mockDa = mockRepo.DynamicMock<IMyMockDa>(); var service = new AuthenticationService(mockDa); using(mockRepo.Record()) { //I realize this is a terrible method and should not exist if you // care about security,but for demonstration purposes... Expect.Call(mockDa.GetPassword("User")).Return("Password"); } using(mockRepo.Playback()) { Assert.IsTrue(service.DoLogin("User","Password")); } } 习惯于首先以手动方式处理事务,以便理解概念,然后继续使用框架.呼!很多信息,但正如您所看到的,TDD是一个完整的设计理念.但是,它会产生更清晰的代码,更好的设计和更少的错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何从水晶报表中的组字段中删除组名
- asp.net-mvc – 动作过滤器执行顺序
- asp.net-mvc – 使用breeze js不直接与DBContext交互
- asp.net – 如何从vb.net中的日期时间中提取日期部分
- asp.net – EF代码优先:当IDENTITY_INSERT设置为OFF时,无法
- asp.net – 是每个用户或每个应用程序的标准OutputCache属性
- ef-code-first – 如何首先使用代码向Identity默认表AspNet
- asp.net-mvc-3 – 复杂类型的可选[必需]
- Linq高级查询
- asp.net – 当我禁用提交按钮以防止双击时,为什么我的表单没