TDD模式下寫args(C )

2021-09-29 21:46:29 字數 2373 閱讀 8902

也是第一次寫部落格,萌新程式設計師一枚,寫的不好或者**不行請見諒,勿噴,謝謝~~

初始需求

我們經常會遇到需要解析命令列引數的場景。如果沒有趁手的工具,我們可以自己寫乙個,自己想辦法處理傳給main函式的引數。

傳入乙個程式的引數包含了「標記」(flag)和「值」(value)。標記都是乙個字母,前面加上「-」號(例如「-p」這樣)。每個標記可以有乙個值與之對應,也可以沒有對應的值。

我們要開發乙個解析器(parser)來處理這些引數。這個解析器需要乙個引數結構(schema)來描述「這個程式應該接受哪些引數」的資訊,包括:

應該有幾個標記;

每個標記應該是什麼型別;

每個標記的預設值是什麼。

引數結構指定好以後,就可以把實際接收到的引數列表傳給引數解析器。解析器會首先驗證引數列表是否與引數結構相匹配。然後,程式就可以向引數解析器查詢每個引數的值(根據引數的標記名)。返回值的型別應該與引數結構中規定的型別相一致。

例如,程式接收到的引數是這樣:

-l -p 8080 -d /usr/logs

那麼對應的引數結構應該規定3個標記:l、p、d

l(logging,是否記錄日誌)標記沒有與之對應的值,這是乙個布林型的標記,如果傳入了「-l」就為true,否則為false。

p(port,埠號)標記的值是整數型。

d(directory,目錄)標記的值是字串型。

如果引數結構中規定了的標記在實際的引數列表中沒有出現,那麼就應該返回合理的預設值,例如布林型的預設值可以是false,數值型的預設值可以是0,字串型的預設值可以是空字串。

internal class

args

public object getvalue

(string name)

}

public

class

commandtest

[fact]

public

void

test_commd_has_no_value()

[fact]

public

void

test_commd_has_no_negative()

}

using system;

using system.collections;

using system.collections.generic;

using system.linq;

using system.text;

namespace argstest

else

}else}}

private

static bool isvalue

(string value)

if(value.

indexof

("-")==

0)if(convert.

toint32

(value_one)

>=

0&& convert.

toint32

(value_one)

<=9)

}return

false;}

public string getvalue

(string name)

}}

using system;

using system.collections;

using system.collections.generic;

using system.linq;

namespace argstest);

}public object getvalue

(string name, string strvalue)}}

}

using system;

using system.collections.generic;

using system.text;

using xunit;

namespace argstest

[fact]

public

void

test_int()

[fact]

public

void

test_string()

}}

using system;

using xunit;

namespace argstest

[fact]

public

void

args_test_number()

}}

微服務模式下的TDD實踐指南

1.1 單元測試和tdd 1.2 實施tdd的目的 1.3 微服務中的測試2.1 基本過程 2.2 過程說明 2.3 tdd實踐 tdd開發人員,可遵循上述開發過程,每次只關注乙個事情,經常切換三頂帽子 紅帽子 綠帽子 藍帽子 tdd基本過程如下 對於tdd的初學者,很多人會覺得寫測試會占用較多開發...

極限程式設計下的TDD

極限程式設計時是軟體開發中擁抱變化的產物。測試驅動開發 test driven development 是極限程式設計中倡導的程式開發方法,以其倡導先寫測試程式,然後編碼實現其功能得名。測試驅動開發始於20世紀90年代。測試驅動開發。測試驅動開發的目的是取得快速反饋並使用 illustrate th...

基於spring下的TDD開發

好些日子沒有寫blog了,因為,看著自己的日誌的質量一天比一天低,就好像乙個一天天老去的女人看著自己的臉日漸老去一樣難受,還不如忘卻的好.在這樣的心態下,前兩天看到自己的blog在csdn的 排行榜 一天天下降,竟然沒有任何的感覺.但blog中的質量比較差的文章,我是不會去刪的,畢竟那是自己的學習和...