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

重构目的

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

目录结构

  • 集成测试
    • 作为管理员
      • 我可以管理XXX
        • 测试一.cs
        • 测试二.cs
      • 我可以管理YYY
        • 测试一.cs
        • 测试二.cs
      • 已存在XXX场景.cs
      • 已存在YYY场景.cs
    • 作为普通用户
      • ......
    • SetUp.cs
    • EstablishHelper.cs

继承结构

79865-20170422112200821-1889063454.png

代码说明

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);
        ......
    };
}

转载于:https://www.cnblogs.com/tuty/p/6744109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值