• 框架重构:规范集成测试的结构和命名规则


    重构目的

    • 统一命名,改善命名混乱的局面
    • 使用 场景 解决准备工作中存在大量重复代码的问题

    目录结构

    • 集成测试
      • 作为管理员
        • 我可以管理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);
            ......
        };
    }
    
  • 相关阅读:
    struts2 + ajax(从后台获取json格式的数据返回到前端,然后前端用jquery对json数据进行解析)
    request 中文乱码问题
    Eclipse 支持jQuery 自动提示
    基于按annotation的hibernate主键生成策略
    微信创建菜单操作
    百度转换经纬度为地址
    微信工具类(常用接口)的整理
    微信URL有效性验证
    原型模式 (原型管理器)
    发送邮件 Email(java实现)
  • 原文地址:https://www.cnblogs.com/tuty/p/6744109.html
Copyright © 2020-2023  润新知