您的位置:首页 > 其它

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

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);
......
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: