的「單元測試」 shell腳本將有一個包裹腳本,執行腳本在受控環境中的一個略顯輕率的想法 - 即它定義了「模擬」的真正命令你不想執行的功能(例如ssh() { }
)。
這將使你測試你感興趣的相互作用,而不用擔心你呼喚其他進程,如brainzzy描述。這仍然非常依賴於精心設計的bash代碼,但至少在理論上它可能,我想。
演示:
$ cat /tmp/grep.sh
#!/bin/bash
# Simple program that relies on grep
echo -e "This is a test\nThis line doesn't match." | grep test
單位計:
$ cat /tmp/unittest.sh
#!/bin/bash
grep() {
echo "Mock GREP result"
}
. "[email protected]"
現在,如果我們直接運行grep.sh
,它會搜索按預期:
$ /tmp/grep.sh
This is a test
但是,如果從單元測試腳本中運行grep
被功能嘲笑:
$ /tmp/unittest.sh /tmp/grep.sh
Mock GREP result
允許我們測試我們試圖驗證的任何行爲。
這有幾個限制因素,例如需要從同一個shell(.
命令)運行,這意味着如果腳本反過來調用其他腳本,它們將再次調用真實命令。
另一種方法是在一個單元測試目錄中,例如,以限定一組腳本
$ ls /usr/local/unitbin
grep
ssh
svn
然後讓單元測試腳本改變腳本運行的路徑,例如:
$ cat /tmp/unittest.sh
#!/bin/bash
PATH=/usr/local/unitbin:$PATH "[email protected]"
這應該調用反過來其他腳本腳本。
這兩個例子,就像我說的,是有點可笑,而且可能更麻煩比他們的價值。在考慮這條道路之前,我一定會看看這個問題的其他答案。但是如果你有單元測試的bash代碼,但不能安全地在沙箱中運行,其中一個選項可能適用於你。
之所以說它是難以維持的是,它是圍繞基本功能的「做這一切的」包裝。在我看來,最好是針對特定用例編寫完整的應用程序(包括異常處理和junit測試),並可能爲特定維護任務保留一組有限的shell腳本。 – 2012-01-08 13:12:34
/bin/sh可以做一個_lot_。如果你可以將你的配置保存爲一個簡單的變量列表,你可以調用「source」/「。」將其讀入。如果您有一個XML文件,請編寫一個XSLT腳本來創建變量列表。 – 2012-01-08 13:20:57