框架重构:规范集成测试的结构和命名规则
2017-04-21 16:15
267 查看
重构目的
统一命名,改善命名混乱的局面使用 场景 解决准备工作中存在大量重复代码的问题
目录结构
集成测试作为管理员
我可以管理XXX
测试一.cs
测试二.cs
我可以管理YYY
测试一.cs
测试二.cs
已存在XXX场景.cs
已存在YYY场景.cs
作为普通用户
......
SetUp.cs
EstablishHelper.cs
继承结构
代码说明
SetUp.cs
主要负责service对象的实例化,部分对象可能需要mock对象public class SetUp : BaseActionSpec { protected static IAdminService AdminService; protected static ISecurityService SecurityService; protected static IAuthenticationService AuthenticationService; protected Establish WorkstageManageContext = () => { AdminService = A<IAdminService>(); SecurityService = A<ISecurityService>(); AuthenticationService = MockRepository.GenerateMock<IAuthenticationService>(); IoC.Current.RegisterInstance(typeof(IAuthenticationService), AuthenticationService); AuthenticationService = MockRepository.GenerateMock<IAuthenticationService>(); IoC.Current.RegisterInstance(typeof(IAuthenticationService), AuthenticationService); IoC.Current.RegisterInstance(typeof(IFileHelper), new FileHelperForTest()); }; }
EstablishHelper.cs
通过封装,为测试提供更加简便的 创建对象 和 返回Identifier 操作public class EstablishHelper : SetUp { public static SaftLawIdentifier CreateSafeLaw(string name) { return AdminService.CreateSaftLaw() .Name(name) .Entity.Id; } }
已存在XXX场景.cs
创建后续用于测试的实体对象以及其他通用的准备工作场景可以从其他场景继承,共享相同的准备工作
将用于添加测试和编辑测试需要的字段定义放在场景,避免重复的代码
public class 已存在法律法规场景 : EstablishHelper { Establish context = () => Id = CreateSafeLaw("安全法"); protected static SaftLawIdentifier Id; protected static string Name = "Name"; ...... }
public class 已存在XXX场景 : EstablishHelper {} public class 已存在YYY场景 : 已存在XXX场景 {}
当浏览XXX列表页面时.cs
如果使用了通用的准备工作,从某个场景继承如果不需要通用的准备工作,则从EstablishHelper继承
对于Action的测试,学习使用Machine.Specifications.Mvc的语法
[Subject(typeof(SaftLawController), "Index")] public class 当浏览法律法规列表页面时 : 已存在法律法规场景 { Establish context = () => subject = Action<SaftLawController>(x => x.Index()); Because of = () => result = subject.Invoke(); It 应该正确的浏览到所有的法律法规信息 = () => result.ShouldBeAView() .And().ShouldHaveModelOfType<IEnumerable<SaftLaw>>() .And().Select(x => x.Id).ShouldContainOnly(Id); }
当提交XXX添加页面时.cs
[Subject(typeof(SaftLawController), "Create")] public class 当提交安全法律法规添加页面时 : 已存在法律法规场景 { Establish context = () => { var form = new FormCollection(); form.Add(Keys.Name, Name); ...... subject = Action<SaftLawController>(x => x.Create(form)); }; Because of = () => subject.Invoke(); It 应该成功添加法律法规 = () => { var saftlaw = repository.FindOne(new SaftLaw.ByName(Name)); saftlaw.Name.ShouldEqual(Name); ...... }; }
相关文章推荐
- All-In-One Code Framework: 微软一站式开发技术框架 示例命名规则和目录结构说明
- 【自然框架 NatureFramework】 项目结构、命名空间和命名规范
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- C#中的命名规则与编码规范
- C#命名规则、开发习惯和风格 - 一口气看完会吐血,不看重构时候会吐血
- cakephp框架之命名规则
- 谈 三层结构与MVC模式的区别 框架、架构、模式、重构
- 建站框架规范书之——文件命名
- ARM体系结构的命名规则
- 规范的常用CSS命名规则
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- VBA命名规则及代码规范
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- Domino Web开发规则之一:Notes命名规范
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- Oracle编程的编码规范及命名规则
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- 数据表结构的张秋范式命名规则