簡體   English   中英

TDD /單元測試Windows應用程序?

[英]TDD / Unit testing a windows application?

我很擅長做任何類型的測試,但我做了一點閱讀,看起來這是一個很好的方法。 我喜歡只需單擊按鈕並確保代碼庫穩定的想法。 只要測試通過,就可以自由地進行攻擊,這非常有趣。

但是,我的軟件是基於Windows的程序。 基本上它的作用是與用戶桌面上的其他窗口進行交互,並根據特定條件在屏幕上移動它們。 如果可以看到XX圖像,請將該窗口移動到x / y坐標。 如果在該窗口上按下F9鍵盤快捷鍵,請將其移至x2 / y2坐標。 等等。

我不知道如何進行任何類型的測試。 任何幫助表示贊賞。

既然你提到,你是一個初學者,我會在這里提醒一下,你需要小心的,你考什么 你希望測試你的邏輯,而不是Windows。 為此,您需要將您的關注點分成包含邏輯的類(或類),以及包含您使用的API的包裝器(代理)的類 - 您不測試API。 他們的工作直到你證明不是這樣

您將需要測試您的類,並存根或模擬代理。 在上面的示例中,例如,如果您使用Windows API命令來提供解決方案,則會將用於移動窗口的命令放入WindowsProxy類中,並模擬調用, 驗證是否對其進行了調用,但實際上並沒有在測試中運行它們。

如果您使用的是.NET,Windows窗體或類似的框架,那么您將需要使用支持測試的模式,例如MVP 您需要編寫測試來練習Presenter ,同時存根或模擬 View (您的窗口)和Model (您使用的任何API或域對象)。

這是一個示例架構:

public interface IView { ... }

public class View : IView
{
   private Presenter _p;
   View()
   {
      _p = new Presenter(this);
      ...
   }

}

public class Presenter
{
   presenter IView _v;
   Presenter(IView view)
   {
      _v = view;
   }
}

使用像Moq這樣的模擬框架,您可以輕松地存根和模擬視圖,並測試演示者(所有邏輯將駐留在哪里)。 使用Moq,您可以在模擬上使用測試集值下的類,然后驗證它們的值(例如窗口的坐標)。

希望這可以幫助。 我花了很多時間開發基於Win-Form的自定義控件,並使用TDD開發它們。 一旦掌握了它,這不是不可能的,甚至是困難的。

如果您需要進一步詳細說明,請與我們聯系。

阿薩夫。

不推薦使用UnitTest窗口,因此您最好將應用程序重構為Model-View-Controller(任何類型的此模式)並獨立測試Controller和Model類。

為了對這種類型的應用程序進行單元測試,您需要區分測試在屏幕上看到的內容以及測試應用程序的狀態。

如果我采取你的一個例子:

如果在該窗口上按下F9鍵盤快捷鍵,請將其移至x2 / y2

您可以構建代碼,以便您可以輕松觸發移動窗口的函數/方法。 然后你想要詢問窗口狀態並確定它的位置。 如果窗口狀態報告它位於x2 / y2位置,那么這是一個肯定的結果。

這些類型的測試有很多價值。 當然,窗口的位置總是有可能,實際出現的位置可能不匹配。 因此,您仍然應該在單擊按鈕並查看屏幕的位置進行一些測試。 你不需要像那樣做所有的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM