سؤال

لقد وجدت للتو حالة اختبار TestNG تستخدم Spring لتوفير مصدر البيانات الخاص بها.ونتيجة لذلك، فإن الكود نظيف وموجز تمامًا.

ومع ذلك، أحتاج إلى توسيع حالات الاختبار حتى يتمكنوا من أخذ قائمة متغيرة من المدخلات.

هل أنا عالق في استخدام مراجع الفول لقائمة القوائم كما حاولت أدناه؟هل هناك طريقة للقيام بذلك وتظل جميلة (على سبيل المثال؟لا تفكك التدفق المنطقي للمدخلات متبوعًا بالإخراج)؟هل هناك طريقة أفضل؟

<?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>

لاحظ أن الكود الأصلي يبدو أنه يستخدم خريطة بدلاً من القائمة لأنها تبدو طريقة أسهل لتوفير قائمة String[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

لاحظ أن طريقة الاختبار الخاصة بك يمكن أن تعلن إما "Object..." أو "Object[]" (وهو نفس الشيء بالنسبة للمترجم).

نصائح أخرى

سأستخدم TestNG وبنية DataSource الخاصة به باعتبارها الطريقة الصحيحة للقيام بذلك.يمكنك بالتأكيد إجراء تكوين Spring هذا، ولكن نظرًا لأنه رمز اختبار، أعتقد أن TestNG هو المكان الأكثر طبيعية له.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top