2016-05-29 53 views
-2

我有一個桌面應用程序中,我有200個測試用例與不同的輸入參數編碼的UI測試的情況下生成代碼

現在的問題是,每當我記錄每個測試用例與不同的輸入參數

有沒有什麼辦法讓我可以將代碼複製並更改參數,使我的代碼保持相同的所有測試情況下,只有輸入參數的變化

+0

我想知道誰會回答投票編碼的UI問題,而不會留下任何評論,爲什麼... – MPavlak

回答

1

有幾件事情需要解決在這裏。首先,您可以使用數據驅動方法運行測試,如the link above中所述。

更重要的是,無論如何,在我看來,你是如何編寫測試的,這樣他們可以被數據驅動,你究竟測試了什麼,你需要這麼多的組合?

在編寫測試時,重要的是要有可重用的代碼來測試。我會建議看看像Code First ScaffoldingCoded UI Page Modeling(我寫的頁面建模的東西)。通過這些方法,您的測試代碼更具可維護性和靈活性(易於手動更改)。這將允許極其簡單的數據驅動測試。

public void WhenPerformingCalculation_ThenResultIsCorrect() { 
    // imagine calculator with two numbers and a sign 
    var testResult = 
    modelUnderTest.LeftSideNumber.SetValue(3) // set first number 
        .Operator.SetValue("*") // set sign 
        .RightSideNumber.SetValue(10) // set right number 
        .Evaluate.Click() // press evaluate button 
        .Result; // get the result 
    Assert.AreEqual(testResult, 30); 
} 

成爲

public class CalculationParameters 
{ 
    public double LeftNumber {get;set;} 
    public string Operator {get;set;} 
    public double RightNumber {get;set;} 
    public double Result {get;set;} 
    public override string ToString(){ return $"{LeftNumber} {Operator} {RightNumber} = {Result}"; } 
} 

public void WhenPerformingCalculation_ThenResultIsCorrect() { 
    ICollection<CalculationParameters> parameters = getParameters(); 

    List<Exception> exceptions = new List<Exception>(); 
    foreach(CalculationParameters parameter in parameters) 
    { 
     try 
     { 
      var testResult = 
      modelUnderTest.LeftSideNumber.SetValue(parameter.LeftNumber) // set first number 
          .Operator.SetValue(parameter.Operator) // set sign 
          .RightSideNumber.SetValue(parameter.RightNumber) // set right number 
          .Evaluate.Click() // press evaluate button 
          .Result; // get the result 
      Assert.AreEqual(testResult, parameter.Result); 
     } 
     catch (Exception e) 
     { 
      exceptions.Add(new Exception($"Failed for parameters: {parameter}", e)); 
     } 
    } 
    if(exceptions.Any()){ 
     throw new AggregateException(exceptions); 
    } 
} 

其次,爲什麼你需要在給定的測試,測試輸入/輸出如此多的組合?如果您正在測試諸如「給定登錄頁面,提供無效憑證時,則向用戶提供警告」。你真的需要測試多少無效輸入?對於有效憑證將會有第二次測試,並且不需要數據驅動。

我會提醒你小心,你沒有測試應該是你的UI中的單元測試的東西。這聽起來像是在測試不同的輸入組合,以查看UI是否生成正確的輸出,這應該可能是您的基礎系統的單元測試。在測試用戶界面時,通常足以測試對視圖模型的綁定是否正確,而不是測試計算或其他服務器邏輯是否準確執行。

我提供的例子顯示了我不會測試客戶端,除非該計算器只存在客戶端(沒有服務器端驗證或關於計算的邏輯)。即使在這種情況下,我可能會得到一個javascript測試運行器來測試爲我的計算器供電的視圖模型,而不是使用編碼的ui來執行此測試。

你能提供一些你正在測試的輸入/輸出組合的例子嗎?

0

可以通過命令行中使用事件參數的應用與一個批處理腳本,或者你可以創建一個函數來傳遞請求的參數。 在主標題中,您可以使用 main(string eventargs []);

在字符串變量將在命令行事件參數