這也是C#代碼嗎?代碼閱讀性進階
沒有太多的羅嗦,代碼本身已經(jīng)足夠。如果,要添幾個標簽的話就是: 中文化,流暢性接口(Fluent Interface),API.
只有幾點補充說明:
1。 這都是真實可運行的代碼,請看測試狀態(tài): 點擊Login as guest
2。 測試使用Machine Specification, 重點是Establish部分。
3。僅僅使用于集成測試(用戶故事);不建議業(yè)務領域和單元測試使用。
4。這里只列出最終使用代碼(測試說明一切);避免細節(jié)/實現(xiàn)的干擾。實現(xiàn)請看: Examples.cs "一個“語法的實現(xiàn) ”要“語法實現(xiàn)
文章發(fā)布后,很多的評論,特作出以下解釋:
這一段代碼的技術重點,首先是行為驅(qū)動開發(fā)(BDD), 偏重于需求描述(測試用例),而輕編程能力。
第二個技術點,流暢型接口, 對內(nèi)是功能封裝,對外是使用接口(API). 用Facade模式來看待,會更好理解。如果在功能實現(xiàn)內(nèi)部使用Facade當然會頭痛。
最后,才是使用中文。即使,不用中文,前兩點也會很有用。
我是實踐派,不是學院派。這是我實際項目的真實代碼,不是為了裝酷。
得心應手武器庫
MSpec
本文所涉及使用的工具, 見前文:我的.Net武器庫 ------ 新.Net架構(gòu)必備工具列表
使用的視屏演示:
- using System.Linq;
- using Machine.Specifications;
- using Skight.Arch.Domain;
- using Skight.Arch.Domain.Core.Containers;
- using Skight.Arch.Domain.Extensions;
- using Skight.Arch.UserStories.Helpers;
- using Skight.ES.Register.Presentation;
- using Skight.ES.Register.Presentation.Modal;
- using Skight.ES.Register.Presentation.Web.Application;
- using Skight.ES.Register.Presentation.Web.ExamDistrictAdmin;
- using Skight.ES.Register.Services;
- using Skight.ES.Register.UserStories.Helpers;
- namespace Skight.ES.Register.UserStories.作為.考區(qū)組考人.我想查看考試從而可以了解考試信息
- {
- [Subject("考試"), Tags("集成測試", "用戶故事")]
- public class 當瀏覽某考試界面 : CommandTestBase
- {
- private Establish that =
- () =>
- {
- 要.創(chuàng)建(示例.考區(qū).省直);
- 要.創(chuàng)建(示例.考試定義.計算機)
- .添加科目(示例.科目.AutoCAD)
- .添加科目(示例.科目.Windows2000)
- .添加科目(示例.科目.WindowsExcel);
- 要.創(chuàng)建(示例.考試.省直2012年1月計算機考試)
- .設為電子化考試()
- .設置考試起始時間(Date.Of(2012,1,1),Date.Of(2012,2,1))
- .設置審核()
- .設置考場容量(50)
- .設置科目費用(Money.of(100))
- .添加科目(示例.科目.AutoCAD)
- .添加科目(示例.科目.Windows2000)
- .添加科目(示例.科目.WindowsExcel)
- .添加個人信息定義(示例.個人信息定義.姓名)
- .添加個人信息定義(示例.個人信息定義.性別)
- .添加個人信息定義(示例.個人信息定義.身份證)
- .添加考場(示例.考場信息定義.考場01)
- .添加考場(示例.考場信息定義.考場02)
- .添加考場(示例.考場信息定義.考場03); ;
- var exam_service = Container.get<ExamService>();
- subject = new ExamDetailGet(exam_service);
- ui.load_context_data(Keys.Context.ExamDate.with_value(示例.考試.省直2012年1月計算機考試));
- };
- private Because of =
- () =>
- {
- subject.process(ui);
- result = ui.get_model<ExamDetailDTO>(Views.DisplayExamDetail);
- };
- private It 應該顯示考試科目列表 =
- () => result.Subjects.Select(s=>s.Code)
- .ShouldContainOnly(示例.科目.AutoCAD.Code, 示例.科目.Windows2000.Code, 示例.科目.WindowsExcel.Code);
- private It 應該顯示考試開始日期 =
- () => result.BeginDate.ShouldEqual(Date.Of(2012, 1, 1));
- private It 應該顯示考試結(jié)束日期 =
- () => result.EndDate.ShouldEqual(Date.Of(2012, 2, 1));
- private It 應該顯示是否電子化考試 =
- () => result.IsElectronicExam.ShouldBeTrue();
- private It 應該顯示是考試考場容量 =
- () => result.ExaminationRoomCapacity.ShouldEqual(50);
- private It 應該顯示是否考試報名需要審核 =
- () => result.NeedInspection.ShouldBeTrue();
- private It 應該顯示考試默認科目費用 =
- () => result.DefaultCharge.ShouldEqual(Money.of(100));
- private It 應該顯示報考人員信息項目 =
- () => result.PersonalInfoDefs.ShouldContainOnly(示例.個人信息定義.姓名, 示例.個人信息定義.身份證, 示例.個人信息定義.性別);
- private It 應該顯示考試相關考場信息 =
- () => result.Scenes.ShouldContainOnly(示例.考場信息定義.考場01, 示例.考場信息定義.考場02, 示例.考場信息定義.考場03);
- private static ExamDetailGet subject;
- private static ExamDetailDTO result;
- }
- }
原文鏈接:http://www.cnblogs.com/Wonner/archive/2012/07/19/CSharp_In_Chinese.html
【編輯推薦】