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 }
    从优秀到卓越
    皓月碧空,漫野如洗,行往卓越的路上

  • 相关阅读:
    玩家上线
    小退
    GS发包到MS
    share初始化
    3 水仙花数
    The left-hand side of an assignment must be a variable,代码中使用了中文的字符
    Mac Sublime Text 浏览器 设置快捷键 让html文件在浏览器打开
    2 质数求解
    1 斐波那契的兔子
    18 赛手的名单
  • 原文地址:https://www.cnblogs.com/Wonner/p/CSharp_In_Chinese.html
Copyright © 2011-2022 走看看