我很新去,所以我可能誤解有關圍棋的異步/流處理基礎性的東西,但在這裏不用...異步測試使用流處理
我想寫使用ginkgo一些測試我寫了一個處理流的函數。
處理端從文件中讀取換行符分隔的文本,直到它遇到特殊的分隔符行,此時它嘗試將文本解析爲JSON。代碼如下所示:
func ParseConfig(inStream *os.File) (Config, error){
var header string
var stdin = bufio.NewScanner(inStream)
for stdin.Scan() {
line := stdin.Text()
if line == "|||" {
break;
}
header += line
}
// parse JSON here and return
}
我的測試看起來像這樣
Describe("ParseConfig()", func() {
It("should pass for a valid header", func(){
_, err := io.WriteString(stream, "{\"Key\": \"key\", \"File\": \"file\"}\n|||\n")
Expect(err).NotTo(HaveOccurred())
conf, err := parser.ParseConfig(stream)
Expect(err).NotTo(HaveOccurred())
Expect(conf.Key).To(Equal("key"))
})
})
不幸的是,這會產生一個JSON解析錯誤,因爲它試圖解析一個空字符串。我假設我的問題是,我已經告訴ParseConfig()函數監聽該字符串的數據之前,我正在發送字符串的流?但我並不完全清楚我可以如何重構這個使用正確的去例程來首先偵聽數據然後發送它。我看到的一些潛在的解決方案是圍繞着使用「渠道」(我不熟悉),但我擔心這個需求可能不值得一個主要的重構來引入一個全新的併發範例。
謝謝!
你舉的例子是由編譯很遠。請提供一個至少編譯的例子。你的'流'io.Writer(你傳遞給io.WriteString)在哪裏? – creack