2009-11-18 63 views
0

我剛剛發現了一個使用Spring提供數據源的TestNG測試用例。結果代碼非常簡潔。將數組的數組放入彈出環境中

但是,我需要擴展測試用例,以便他們可以獲取輸入的變量列表。

我堅持使用bean引用列表的列表,因爲我已經嘗試下面?有沒有辦法做到這一點,仍然很漂亮(即不打破輸入的邏輯流和輸出)?有沒有更好的辦法?

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 

    <bean id="stringPatternRegexMap" class="java.util.HashMap"> 
     <constructor-arg> 
      <map> 
       <entry key="some input #1" value="expected output #1"/> 
       <entry key="some input #2" value="expected output #2"/> 
       <entry key="some input #3" value="expected output #3"/> 
       <entry key-ref="multi-list-1" value="expected output #3"/> 
       <entry key-ref="null-reference" value="null-reference"/> 
      </map> 
     </constructor-arg> 
    </bean> 

    <bean id="multi-list-1"> 
      <list> 
        <value>apple</value> 
        <value>banana</value> 
        <value>orange</value> 
      </list> 
    </bean> 

    <bean id="null-reference"> 
      <value> 
        <null/> 
      </value> 
    </bean> 
</beans> 

注意出現的原代碼中使用列表的地圖,而不是因爲它似乎更簡單的方法來提供字符串列表[2]。

回答

2

沒有,你可以使用一個@dataProvider飼料用的參數變量號的測試方法:

@DataProvider 
    public Object[][] dp() { 
    return new Object[][] { 
     new Object[] { new Object[] { "a" } }, 
     new Object[] { new Object[] { "b", "c" } }, 
    }; 
    } 

    @Test(dataProvider = "dp") 
    public void g1(Object... params) { 
    System.out.println("Received " + params.length + " parameters"); 
    } 

會打印:

Received 1 parameters 
Received 2 parameters 

請注意,您的測試方法可以聲明或者「對象...「或」對象[]「(這與編譯器相同)。

+0

感謝這個例子,我已經重新實現了這個測試。 Spring XML文件還有另一個特性,我喜歡這個解決方案,但是 - 正則表達式不需要每個反斜槓都有額外的時間。 – 2009-11-19 22:36:42

1

我會使用TestNG和它的DataSource構造作爲正確的方式來做到這一點。你當然可以做這個Spring配置,但是由於它是測試代碼,我認爲TestNG是它的更自然的家。

+0

嗯,它看起來像TestNG的DataProvider通常需要已知數量的項目。變數的參數是訣竅。 我確實喜歡TestNG爲每個數據項創建獨立測試結果的行爲。 – 2009-11-18 17:13:20