2011-08-26 49 views
0

我有一個以.NET 2.0編寫的舊WinForm應用程序。該應用程序不遵循任何模式或圖層模式。我的客戶現在想引入單元測試框架。由於它是實時應用程序,所以重新編寫整個代碼非常危險。我應該遵循什麼方法?將.NET應用程序轉換爲測試驅動的應用程序

由於提前

回答

4

有一本我見過的關於這個確切主題的書,我沒有看過它,但它似乎適合您的問題,但我不知道它是WinForms這個事實是否複雜。

「修改代碼的工作」

http://books.google.ie/books?id=CQlRAAAAMAAJ&q=dealing+with+legacy+code&dq=dealing+with+legacy+code&hl=en&ei=LnVXTrviCtSu8QPEwei0DA&sa=X&oi=book_result&ct=result&resnum=1&ved=0CC0Q6AEwAA

+0

+1:我已經閱讀過,而任何試圖改進和向現有代碼庫添加測試的人都應該閱讀它。 –

0

在的WinForms真的很難進行單元測試,因爲後面的代碼是緊密相連的GUI本身。一些自動化測試可能是最好的,你可以在WinForms應用程序上得到最好的結果,而不用改變程序。

如果你的客戶想要一個可測試的解決方案,我會建議在WPF中製作它,並使用像Caliburn.Micro這樣強調單元測試的MVVM框架。

不幸的是,這意味着重寫整個應用程序。

簡短的回答

要麼重寫應用程序,或者也懶得多與單元測試。

0

要做到這在UI測試(因爲它是一個基於.NET),你可以使用淨重量輕測試自動化功能。這裏的詳細信息http://msdn.microsoft.com/en-us/magazine/cc163864.aspx 您不必使用外部工具進行自動化。但是,爲了測試底層或業務邏輯,你必須擴展測試用例。

0

我會建議你把最關鍵的部分移到正常的C#類和單元測試那些。然後只對GUI的複雜部分進行UI測試。我從事過一個遺留項目,但使用ASP.NET Webforms而不是Windows窗體,我注意到系統的某些部分經常變化,並且很適合重構和單元測試,而其他部分從未更改過,只是不值得測試的努力。

如果這是一個大項目,那麼這可能需要很長時間。這項工作的一大部分是使代碼可測試並引入某種MVP(Model-View-Presenter)模式,以便能夠將GUI代碼與業務邏輯分開。

我強烈建議您按照Eoin Carroll的建議有效使用遺留代碼。它描述了使用遺留代碼的技術,並通過展示它可以完成的動作(可能會遇到一些困難時期)提供動力。

也可以看看這兩個StackOverflow問題(herehere),討論WinForms和MVP。

0

這取決於你想測試什麼,以及如何編寫應用程序。

GUI很難測試,但請查看一些其他答案。正如我懷疑的那樣,如果您只想測試業務層,那就更簡單了:

如果應用程序的業務與GUI解耦,那麼您可以輕鬆使用NUnit,可以通過將其集成到IDE中的項目中,或者以NUnit自己的方式,然後編寫測試以涵蓋業務層向GUI公開的功能。

如果應用程序未解耦,並且GUI中有很多邏輯,那麼您確實需要重構和解耦。如果沒有這樣做,您將被限制在通過GUI進行測試,這很困難,而且不是完全可以證明的,這意味着GUI的微小變化可能會使您的業務邏輯測試失效。

相關問題