zoukankan      html  css  js  c++  java
  • 这也是C#代码吗 代码阅读性进阶:测试文档化

    没有太多的罗嗦,代码本身已经足够。如果,要添几个标签的话就是: 中文化,流畅性接口(Fluent Interface),API.

    只有几点补充说明:
    1。 这都是真实可运行的代码,请看测试状态: 点击Login as guest
    2。 测试使用Machine Specification, 重点是Establish部分。
    3。仅仅使用于集成测试(用户故事);不建议业务领域和单元测试使用。
    4。这里只列出最终使用代码(测试说明一切);避免细节/实现的干扰。实现请看: Examples.cs "一个“语法的实现 ”要“语法实现

    文章发布后,很多的评论,特作出以下解释:

    • 这一段代码的技术重点,首先是行为驱动开发(BDD), 偏重于需求描述(测试用例),而轻编程能力。
    • 第二个技术点,流畅型接口, 对内是功能封装,对外是使用接口(API). 用Facade模式来看待,会更好理解。如果在功能实现内部使用Facade当然会头痛。
    • 最后,才是使用中文。即使,不用中文,前两点也会很有用。
    • 我是实践派,不是学院派。这是我实际项目的真实代码,不是为了装酷。

    得心应手武器库:

    • MSpec

     本文所涉及使用的工具, 见前文:我的.Net武器库 ------ 新.Net架构必备工具列表

     使用的视屏演示:

     1 using System.Linq;
     2 using Machine.Specifications;
     3 using Skight.Arch.Domain;
     4 using Skight.Arch.Domain.Core.Containers;
     5 using Skight.Arch.Domain.Extensions;
     6 using Skight.Arch.UserStories.Helpers;
     7 using Skight.ES.Register.Presentation;
     8 using Skight.ES.Register.Presentation.Modal;
     9 using Skight.ES.Register.Presentation.Web.Application;
    10 using Skight.ES.Register.Presentation.Web.ExamDistrictAdmin;
    11 using Skight.ES.Register.Services;
    12 using Skight.ES.Register.UserStories.Helpers;
    13 
    14 namespace Skight.ES.Register.UserStories.作为.考区组考人.我想查看考试从而可以了解考试信息
    15 {
    16     [Subject("考试"), Tags("集成测试", "用户故事")]
    17     public class 当浏览某考试界面 : CommandTestBase
    18     {       
    19         private Establish that =
    20             () =>
    21             {
    22                 要.创建(示例.考区.省直);
    23 
    24                 要.创建(示例.考试定义.计算机)
    25                     .添加科目(示例.科目.AutoCAD)
    26                     .添加科目(示例.科目.Windows2000)
    27                     .添加科目(示例.科目.WindowsExcel);
    28 
    29                 要.创建(示例.考试.省直2012年1月计算机考试)
    30                     .设为电子化考试()
    31                     .设置考试起始时间(Date.Of(2012,1,1),Date.Of(2012,2,1))
    32                     .设置审核()
    33                     .设置考场容量(50)
    34                     .设置科目费用(Money.of(100))
    35                     .添加科目(示例.科目.AutoCAD)
    36                     .添加科目(示例.科目.Windows2000)
    37                     .添加科目(示例.科目.WindowsExcel)
    38                     .添加个人信息定义(示例.个人信息定义.姓名)
    39                     .添加个人信息定义(示例.个人信息定义.性别)
    40                     .添加个人信息定义(示例.个人信息定义.身份证)
    41                     .添加考场(示例.考场信息定义.考场01)
    42                     .添加考场(示例.考场信息定义.考场02)
    43                     .添加考场(示例.考场信息定义.考场03); ;
    44 
    45                 var exam_service = Container.get<ExamService>();
    46                 subject = new ExamDetailGet(exam_service);
    47                 ui.load_context_data(Keys.Context.ExamDate.with_value(示例.考试.省直2012年1月计算机考试));
    48             };
    49 
    50         private Because of =
    51             () =>
    52             {
    53                 subject.process(ui);
    54                 result = ui.get_model<ExamDetailDTO>(Views.DisplayExamDetail);
    55             };
    56 
    57         private It 应该显示考试科目列表 =
    58             () => result.Subjects.Select(s=>s.Code)
    59                       .ShouldContainOnly(示例.科目.AutoCAD.Code, 示例.科目.Windows2000.Code, 示例.科目.WindowsExcel.Code);
    60 
    61         private It 应该显示考试开始日期 =
    62             () => result.BeginDate.ShouldEqual(Date.Of(2012, 1, 1));
    63         private It 应该显示考试结束日期 =
    64             () => result.EndDate.ShouldEqual(Date.Of(2012, 2, 1));
    65 
    66         private It 应该显示是否电子化考试 =
    67             () => result.IsElectronicExam.ShouldBeTrue();
    68         private It 应该显示是考试考场容量 =
    69             () => result.ExaminationRoomCapacity.ShouldEqual(50);
    70 
    71         private It 应该显示是否考试报名需要审核 =
    72             () => result.NeedInspection.ShouldBeTrue();
    73         private It 应该显示考试默认科目费用 =
    74             () => result.DefaultCharge.ShouldEqual(Money.of(100));
    75 
    76         private It 应该显示报考人员信息项目 =
    77             () => result.PersonalInfoDefs.ShouldContainOnly(示例.个人信息定义.姓名, 示例.个人信息定义.身份证, 示例.个人信息定义.性别);
    78 
    79         private It 应该显示考试相关考场信息 =
    80             () => result.Scenes.ShouldContainOnly(示例.考场信息定义.考场01, 示例.考场信息定义.考场02, 示例.考场信息定义.考场03);
    81 
    82         private static ExamDetailGet subject;
    83         private static ExamDetailDTO result;
    84     }
    85 }
    从优秀到卓越
    皓月碧空,漫野如洗,行往卓越的路上

  • 相关阅读:
    Azure HPC Pack Cluster添加辅助节点
    Azure HPC Pack 辅助节点模板配置
    Azure HPC Pack配置管理系列(PART6)
    Windows HPC Pack 2012 R2配置
    Azure HPC Pack 节点提升成域控制器
    Azure HPC Pack VM 节点创建和配置
    Azure HPC Pack 部署必要条件准备
    Azure HPC Pack 基础拓扑概述
    Azure VM 性能计数器配置
    Maven私仓配置
  • 原文地址:https://www.cnblogs.com/Wonner/p/CSharp_In_Chinese.html
Copyright © 2011-2022 走看看