2014-06-28 80 views
1

我們的C#應用​​程序體系結構涉及Web服務,數據庫和Winforms應用程序。 winforms應用程序將在名爲ProcessFile的Web服務中調用一個方法。將Specflow與Web服務結合使用

我想使用驗收測試驅動開發技術,並編寫了以下Specflow用戶故事。

Story: Process file 
As a knowledge worker 
I want to process a file 
so that it can go onto the next step. 


Given query A is True 
    And File A exists 
When I run Process with File A 
Then A backup of the existing file exists 
    And a new processed file exists 
    And query B is true 
    And query C is true 

我們的Windows應用程序將調用Web服務的整個過程文件故事。

但是爲了做BDD我們很想有很多像IsQueryBTrue

這導致不希望健談的Web服務調用很少的,我們不希望IsQueryBTrue公佈的API

我我現在認爲測試項目可以直接調用數據服務,並且只需要對Web服務進行一些較小的FileExists調用即可。然而,這並不完全正確,因爲相同的代碼在生產中應該在測試中運行。

如何在充分測試的同時避免發出健談的網絡服務?

我現在想知道我們是否應該使用一個Web API或WCF,而不是一個WSDL Web服務

回答

1

反正有從要發佈,以驗證您從您的來電ProcessFile期望行爲的API?

如果有那麼好,你應該從你的specflow場景做到這一點,以驗證行爲是否符合你的期望。這可能是通過執行一些查詢或可能通過訪問其他網站或其他任何東西。

如果沒有,那麼您將需要驗證'內部'的預期行爲。您可以通過對現有Web服務的擴展來執行此操作,以允許使用諸如IsQueryBTrue(或可能是通用的ExecuteQuery)的方法。

正如你所說你不想這樣做,更好的解決方案可能是爲specflow測試提供另一個測試服務來驗證內部行爲。此服務可能僅供開發人員測試使用,並且未提供給生產系統,或者可能使用內部URL或不同憑據進行身份驗證以保護使用生產API的人員使用該服務。

在這一天結束時,如果你正在使用行爲驅動開發,必須有某種方式來斷言系統的行爲是否如預期,如果沒有辦法公開地做到這一點,唯一的方法是內部檢查,必須讓測試訪問內部系統進行檢查。

對我來說,測試似乎完全可以直接調用數據服務來檢查是否存在需要的東西,特別是如果那些調用已經存在於該服務中。這也似乎更適用於僅用於測試web服務的新方法。

+1

@kirsteng,雖然我很欣賞接受我的回答,但您可能想暫緩一段時間,直到賞金到期。隨着賞金時間越來越近,它將會移動到更高的頁面上,更多的人會看到它,並且你更有可能a)獲得替代答案,或者b)讓知識淵博的人對他們同意的現有答案進行投票,從而爲你提供更多相信答案實際上是正確的。 –

+0

謝謝薩姆。我們最終將整個故事轉移到了服務器端,這樣它就可以直接調用某些東西,而無需將它們添加到Web服務中。感謝賞金小費。 –

+0

@kirsteng,沒問題,很高興你找到了適合你的解決方案。 SpecFlow是一個非常棒的工具。 –

相關問題