2010-06-14 58 views
4

當前我正在爲一個工作流創建一個TestCase,並且工作流具有不同的步驟。 一步的結果很重要,因爲第二步需要知道step1的執行的值。在junit測試用例中的測試方法之間傳遞信息

class TestCaseWorkFlow1 extends TestCase { 

    private static String resultOfStep1 = null; 

    public void testStep1(){ 

    if(failed){ 
     resultOfStep1 = "failed"; 
    } 
    } 

    public void testStep2(){ 

    if(resultOfStep1 != null) { 
     //First test failed. 
    }else { 
    } 

    } 

}

目前我們使用的靜態變量傳遞testmethods之間的信息。

此場景的最佳解決方案是什麼?

請幫忙。

感謝 Ĵ

+0

我會解釋一下它更多。假設,我有一臺服務器託管服務,所以工作流的步驟是 1.連接到服務器 2.提出請求 在步驟2,我需要驗證服務器是否連接。所以我需要的是第一步中的連接對象。 我不想再次連接,因爲會話ID將有所不同。 – Jijoy 2010-06-14 12:01:00

回答

1

傳統的智慧是最好的解決辦法是有從頭開始重新計算每個測試的所有步驟,通常在一個私人的輔助方法,讓你不依賴於順序哪個JUnit執行你的測試(這實際上並沒有按照文本順序定義)。你應該這樣做,除非某些步驟需要真正可怕的時間重新計算。

2

你的測試應該真的是相互獨立的,所以想想是否有辦法做到這一點。例如,您知道成功的step1的結果是什麼,所以只需使用模擬對象或其他方法將其作爲步驟2中的輸入提供即可。或者看看是否有辦法打破這些步驟的順序耦合,以便每個步驟可以獨立運行。

0

我同意Kilian和Graham。測試應該是獨立的和獨立的。即每個測試都應該以與其他測試一樣的方式單獨運行。

但是,如果你在測試之間有這樣的依賴性的一些很好的理由,也許嘗試TestNG。在TestNG中,您可以指定相互依賴的測試。

1

看來你正試圖實現超越單元測試的東西......這非常好。嘗試使用構建在jUnit之上的其他工具,併爲您提供測試行爲的機制,而不是小的代碼單元。我已經成功使用了一段時間的工具之一是jBehave。您將最終使用與腳本步驟匹配的方法執行的純文本腳本來描述測試場景。

0

正如其他人所指出的,你應該讓你的測試彼此獨立。達到此目的的一種方法是爲每個測試正確設置測試夾具。

但是,您的示例中的測試看起來像他們測試同一場景的不同階段。所以我會考慮統一所有的測試方法,如果這種情況不是太複雜。

3

這聽起來不像我的單元測試。這很好,但JUnit可能不是最好的工具。你能升級到JUnit 4嗎? 假設是 -

  1. 寫的JUnit運行,以確保您單位的順序通過靜態變量測試
  2. 通過狀態。使用Assume驗證第一步已經工作。
0
在該基本實施例

,該變量是在實驗中的一個改變,並且可以在測試B中使用

public class BasicTest extends ActivityInstrumentationTestCase2 { 
    public BasicTest() throws ClassNotFoundException { 
     super(TARGET_PACKAGE_ID, launcherActivityClass);   
    } 

    public static class MyClass {  
     public static String myvar = null;    
     public void set(String s) { 
      myvar = s; 
     }    
     public String get() { 
      return myvar; 
     } 
    } 

    private MyClass sharedVar; 

    @Override 
    protected void setUp() throws Exception { 
     sharedVar = new MyClass(); 
    } 

    public void test_A() { 
     Log.d(S,"run A"); 
     sharedVar.set("blah"); 
    } 

    public void test_B() { 
     Log.d(S,"run B");  
     Log.i(S,"sharedVar is: " + sharedVar.get());   
    } 

} 

輸出的結果是:

運行甲

運行B

sharedVar is:blah