रोबोइलेक्ट्रिक के साथ कस्टम दृश्य का परीक्षण


82

मैं रोबोइलेक्ट्रिक 2.1.1 के साथ यूनिट टेस्ट चलाने की कोशिश कर रहा हूं और मैं इसे कस्टम लेआउट्स (जैसे ViewPagerIndicator क्लासेस) को बढ़ाने के लिए नहीं मिल सकता। मान लीजिए कि यह मेरा लेआउट है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="test"
            android:id="@+id/test_test"/>

    <com.viewpagerindicator.CirclePageIndicator
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

</LinearLayout>

मेरे इस परीक्षण वर्ग पर विचार करें:

@RunWith(RobolectricTestRunner.class)
public class TestRoboActivityTest {
    private TestRoboActivity mActivity;

    @Before
    public void setUp() throws Exception {
        mActivity = Robolectric.buildActivity(TestRoboActivity.class).create().get();
    }

    @After
    public void tearDown() throws Exception {
        mActivity = null;
    }

    @Test
    public void testSanity() throws Exception {
        Assert.assertNotNull(mActivity);
    }
}

'Mvan क्लीन टेस्ट' के परिणाम आने से

त्रुटि में परीक्षण:
testSanity (TestRoboActivityTest): XML फ़ाइल। \ res \ layout \ test.xml लाइन # -1 (क्षमा करें, अभी तक लागू नहीं): कक्षा में त्रुटि ला रहा है ।viewpagerindicator.CirclePagebndicator

अच्छा है, इसलिए ऐसा लगता है कि कस्टम दृश्य अभी तक समर्थित नहीं हैं। उनकी वेबसाइट पर नमूना रोबोइलेक्ट्रिक परियोजना की जाँच करते हुए , लेआउटइन्फ़्लैटर से लेआउट को बढ़ाने के लिए एक समाधान हो सकता है:

@RunWith(RobolectricTestRunner.class)
public class TestRoboActivityTest {
    private View mTestRoboActivityView;

    @Before
    public void setUp() throws Exception {
        mTestRoboActivityView = LayoutInflater.from(new Activity()).inflate(R.layout.test, null);
    }

    @After
    public void tearDown() throws Exception {
        mTestRoboActivityView = null;
    }

    @Test
    public void testSanity() throws Exception {
        Assert.assertNotNull(mTestRoboActivityView);
    }
}

जिसके परिणामस्वरूप:

त्रुटि में परीक्षण: 
testSanity (TestRoboActivityTest): XML फ़ाइल। \ res \ layout \ test.xml लाइन # -1 (क्षमा करें, अभी तक लागू नहीं): कक्षा में त्रुटि ला रहा है ।viewpagerindicator.CirclePagebndicator

मेरा अंतिम उपाय छाया वर्गों का उपयोग करने की कोशिश कर रहा था:

@Implements(CirclePageIndicator.class)
public class CirclePageIndicatorShadow implements PageIndicator {

    @Override
    @Implementation
    public void setViewPager(ViewPager view) {
        // Stub
    }

    // etc.
}

और का उपयोग कर @Config(shadows = {CirclePageIndicatorShadow.class})। इससे फिर परिणाम हुआ

त्रुटि में परीक्षण: 
testSanity (TestRoboActivityTest): XML फ़ाइल। \ res \ layout \ test.xml लाइन # -1 (क्षमा करें, अभी तक लागू नहीं): कक्षा में त्रुटि ला रहा है ।viewpagerindicator.CirclePagebndicator

संपादित करें (दिसंबर 2014)

कृपया ध्यान दें कि निम्नलिखित स्ट्रेक्ट्रेस को बाद में डेविड राबिनोवित्ज़ द्वारा जोड़ा गया था। संबंधित होते समय, यह वह मुद्दा नहीं है जिसका मैं उस समय सामना कर रहा था।


यहाँ स्टैक ट्रेस है:

android.view.InflateException: XML file .\res\layout\activity_home.xml line #-1 (sorry, not yet implemented): Error inflating class com.test.custom.RobotoTextView
    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    at org.robolectric.tester.android.view.RoboWindow.setContentView(RoboWindow.java:82)
    at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:273)
    at android.app.Activity.setContentView(Activity.java)
    at com.example.testrobocustomfont.MainActivity.onCreate(MainActivity.java:12)
    at com.example.testrobocustomfont.MainActivityTest.setUp(MainActivityTest.java:28)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:241)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createView(LayoutInflater.java:587)
    at android.view.LayoutInflater.createView(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createViewFromTag(LayoutInflater.java:687)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.java:746)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:489)
    at android.view.LayoutInflater.inflate(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:396)
    at android.view.LayoutInflater.inflate(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:352)
    at android.view.LayoutInflater.inflate(LayoutInflater.java)
    at org.robolectric.tester.android.view.RoboWindow.setContentView(RoboWindow.java:82)
    at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:273)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.robolectric.bytecode.ShadowWrangler$ShadowMethodPlan.run(ShadowWrangler.java:455)
    at android.app.Activity.setContentView(Activity.java)
    at com.example.testrobocustomfont.MainActivity.onCreate(MainActivity.java:12)
    at com.example.testrobocustomfont.MainActivityTest.setUp(MainActivityTest.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    ... 22 more
Caused by: java.lang.RuntimeException: error converting RobotoMedium.ttf using EnumConverter
    at org.robolectric.shadows.Converter.convertAndFill(Converter.java:150)
    at org.robolectric.shadows.Converter.convertAndFill(Converter.java:50)
    at org.robolectric.shadows.ShadowResources.createTypedArray(ShadowResources.java:228)
    at org.robolectric.shadows.ShadowResources.attrsToTypedArray(ShadowResources.java:203)
    at org.robolectric.shadows.ShadowResources.access$000(ShadowResources.java:51)
    at org.robolectric.shadows.ShadowResources$ShadowTheme.obtainStyledAttributes(ShadowResources.java:460)
    at android.content.res.Resources$Theme.obtainStyledAttributes(Resources.java)
    at android.widget.TextView.__constructor__(TextView.java:561)
    at android.widget.TextView.<init>(TextView.java:447)
    at android.widget.TextView.<init>(TextView.java:442)
    at com.test.custom.RobotoTextView.<init>(RobotoTextView.java:16)
    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    at org.robolectric.tester.android.view.RoboWindow.setContentView(RoboWindow.java:82)
    at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:273)
    at android.app.Activity.setContentView(Activity.java)
    at com.example.testrobocustomfont.MainActivity.onCreate(MainActivity.java:12)
    at com.example.testrobocustomfont.MainActivityTest.setUp(MainActivityTest.java:28)
    ... 22 more
Caused by: java.lang.RuntimeException: no value found for RobotoMedium.ttf
    at org.robolectric.shadows.Converter$EnumOrFlagConverter.findValueFor(Converter.java:375)
    at org.robolectric.shadows.Converter$EnumConverter.fillTypedValue(Converter.java:343)
    at org.robolectric.shadows.Converter$EnumConverter.fillTypedValue(Converter.java:336)
    at org.robolectric.shadows.Converter.convertAndFill(Converter.java:148)
    at org.robolectric.shadows.Converter.convertAndFill(Converter.java:50)
    at org.robolectric.shadows.ShadowResources.createTypedArray(ShadowResources.java:228)
    at org.robolectric.shadows.ShadowResources.attrsToTypedArray(ShadowResources.java:203)
    at org.robolectric.shadows.ShadowResources.access$000(ShadowResources.java:51)
    at org.robolectric.shadows.ShadowResources$ShadowTheme.obtainStyledAttributes(ShadowResources.java:460)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.robolectric.bytecode.ShadowWrangler$ShadowMethodPlan.run(ShadowWrangler.java:455)
    at android.content.res.Resources$Theme.obtainStyledAttributes(Resources.java)
    at android.widget.TextView.$$robo$$TextView_347d___constructor__(TextView.java:561)
    at android.widget.TextView.<init>(TextView.java:447)
    at android.widget.TextView.<init>(TextView.java:442)
    at com.test.custom.RobotoTextView.<init>(RobotoTextView.java:16)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createView(LayoutInflater.java:587)
    at android.view.LayoutInflater.createView(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createViewFromTag(LayoutInflater.java:687)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.java:746)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:489)
    at android.view.LayoutInflater.inflate(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:396)
    at android.view.LayoutInflater.inflate(LayoutInflater.java)
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:352)
    at android.view.LayoutInflater.inflate(LayoutInflater.java)
    at org.robolectric.tester.android.view.RoboWindow.setContentView(RoboWindow.java:82)
    at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:273)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.robolectric.bytecode.ShadowWrangler$ShadowMethodPlan.run(ShadowWrangler.java:455)
    at android.app.Activity.setContentView(Activity.java)
    at com.example.testrobocustomfont.MainActivity.onCreate(MainActivity.java:12)
    at com.example.testrobocustomfont.MainActivityTest.setUp(MainActivityTest.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    ... 22 more

क्या तुम लोग मुझे सही दिशा में इशारा कर सकते हो? मैं विचारों से बाहर हूं। धन्यवाद।


1
क्या आप एक पूर्ण स्टैक ट्रेस पोस्ट कर सकते हैं?
कोरी डी

क्या आप कस्टम फ़ॉन्ट, या कस्टम दृश्य का उपयोग कर रहे हैं जो कस्टम फ़ॉन्ट का उपयोग करता है? मुझे लगता है कि @joecks उनके उत्तर के साथ सही रास्ते पर हैं। Android कस्टम फ़ॉन्ट को पूर्वावलोकन में प्रस्तुत नहीं कर सकता (यानी, जब आप एक्लिप्स में xml को देख रहे हैं), और यहाँ भी यही समस्या हो सकती है। यदि आप पाठ दृश्य को नियंत्रित करते हैं, तो उस कोड को लपेटने का प्रयास करें जो शैली को पुनः प्राप्त करता हैif (!isInEditMode())
कर्ल

क्या आप लेआउट xml ग्राफ़िकल पूर्वावलोकन में कस्टम दृश्य देख पा रहे हैं?
JstnPwll


1
क्या ओपी अपने स्टैक ट्रेस को पोस्ट कर सकता है ताकि हम मदद कर सकें? किसी और का स्टैक ट्रेस होना बहुत मददगार नहीं है। धन्यवाद।
कालेब

जवाबों:


4

मैं उसी परीक्षण कक्षा में विचारों का परीक्षण करता हूं जो गतिविधि के साथ उनका उपयोग करता है। इस मामले में मैं रोबोइलेक्ट्रिक को उस गतिविधि का एक उदाहरण देने के लिए कहता हूं और उससे मुझे फुलाए गए दृश्य का उदाहरण मिलता है:

@Before
public void setup(){
    activity = Robolectric.buildActivity(MyActivity.class).create().get();
    View view = LayoutInflater.from(activity).inflate(R.layout.myView, null);
}
@Test
 public void allElementsInViewProduct(){
     assertNotNull(view.findViewById(R.id.view1));
     assertNotNull(view.findViewById(R.id.view2));
     assertNotNull(view.findViewById(R.id.view3));
 }

LE: मैं रोबोइलेक्ट्रिक 3.0 का उपयोग करता हूं इसलिए मुझे यकीन नहीं है कि यह आपके लिए लागू होता है।


3

मुसीबत:

यह समस्या इसलिए होती है, क्योंकि प्रोजेक्ट प्रोजेक्ट निर्भरता (उदा:) compile project(':lib-custom')और बाह्य निर्भरता (उदा:) compile 'lib.package:name:1.1.0'को अलग-अलग तरीके से मर्ज करता है । निर्भरताएं मर्ज होने के बाद ऐप में R.javaसभी संसाधन फ़ील्ड (रंग, आईडी, ड्रॉबल्स, ...) के साथ फ़ाइल होती है। लेकिन R.javaसबमॉड्यूल और बाहरी निर्भरता के विलय के बाद उत्पन्न फ़ाइल अलग दिखती है।

यह समस्या केवल परियोजनाओं के साथ मौजूद है, जो सबमॉड्यूल में कस्टम दृश्य हैं । बाहरी निर्भरता के मामले में एक और मुद्दा है, जिसे आसानी से तय किया जा सकता है। यहां निर्भरता प्रकारों के बारे में पढ़ें ।

प्रोजेक्ट निर्भरता परिणाम R.javaफ़ाइल में सभी संसाधन पहचानकर्ता होते हैं, लेकिन सबमॉड्यूल से पहचानकर्ता अपने मूल पूर्णांक पहचानकर्ताओं के बराबर नहीं होता है:

com.lib.custom.R.color.primary != com.main.project.R.color.primary

बाहरी निर्भरता के लिए मर्ज की गई R.javaफ़ाइल सभी बाहरी निर्भरता से R.java फ़ाइलों का सिर्फ एक मर्ज परिणाम है

com.lib.custom.R.color.primary == com.main.project.R.color.primary

उपाय:

मुझे दो संभावित उपाय मिले हैं:

  1. जहाँ संभव हो सबमॉड्यूल से अपनी निर्भरता को बाहरी में बदलें। उदाहरण के लिए viepager इंडिकेटर में maven.org रिपॉजिटरी में एक आइटम है - fr.avianey.com.viewpagerindicator: लाइब्रेरी। लेकिन यह अभी भी पर्याप्त नहीं है - आपको प्रोजेक्ट से संबंधित आइटम जोड़ने की आवश्यकता है। अपने मुख्य सोर्ससेट में फाइल को फाइल करें। अधिक जानकारी यहाँ

उदाहरण:

// add this dependency to your gradle file instead of project dependency
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar'

// add library dependencies for robolectric (now robolectric knows 
// about additional libraries to load resources)
android.library.reference.1=../../../app/build/intermediates/exploded-aar/fr.avianey.com.viewpagerindicator/library/2.4.1

आप यहाँ इस समाधान के लिए भिन्न जाँच कर सकते हैं

  1. अपने मुख्य ऐप के तहत अपने सभी कस्टम दृश्य ले जाएं। केवल इकाई परीक्षण के कारण कस्टम दृश्यों को ऐप में स्थानांतरित करना अच्छा नहीं है, लेकिन यह भी समस्या को ठीक कर देगा Error inflating class

मैं पहले समाधान को पसंद करता हूं लेकिन यह संभव नहीं है कि कभी-कभी प्रोजेक्ट निर्भरता को बाहरी में बदल दें।

मैं इस मुद्दे के बारे में रोबोइलेक्ट्रिक टीम को रिपोर्ट करने जा रहा हूं।

पीएस I के पास इस मुद्दे से संबंधित गिटबब पर परियोजना है


0

mTestRoboActivityView = LayoutInflater.from(new Activity()).inflate(R.layout.test, null);

कोड की इस पंक्ति में आपने 'नई गतिविधि ()' का अर्थ नई गतिविधि का उदाहरण दिया है, जो आपकी वर्तमान गतिविधि के लिए नहीं है। आप वर्तमान गतिविधि पर उदाहरण देकर इस समस्या को हल कर सकते हैं। ऐसे करें इस्तेमाल-

public class TestRoboActivityTest {
private View mTestRoboActivityView;
private Context mContext;

public TestRoboActivityTest(Context mContext){
    this.mContext=mContext;
}

@Before
public void setUp() throws Exception {
    mTestRoboActivityView = (LayoutInflater.from(mContext)).inflate(R.layout.test, null);
}

@After
public void tearDown() throws Exception {
    mTestRoboActivityView = null;
}

@Test
public void testSanity() throws Exception {
    Assert.assertNotNull(mTestRoboActivityView);
}}

मुझे यकीन नहीं है कि उपरोक्त कोड ठीक काम कर रहे हैं लेकिन संदर्भ के लिए उपयोग करते हैं, वर्तमान गतिविधि का उदाहरण। देखें यह आपकी मदद कर सकता है।


0

आप रोबोइलेक्ट्रिक में विचारों को नहीं बढ़ा सकते हैं क्योंकि यह संपूर्ण एंड्रॉइड फ्रेमवर्क का उपयोग नहीं करता है, बल्कि सभी एंड्रॉइड एपीआई को बाहर करता है।

वास्तविक दृश्य प्रदर्शन व्यवहार का परीक्षण करने के लिए आपको रोबोइलेक्ट्रिक का उपयोग नहीं करना चाहिए। इसका उपयोग इकाई परीक्षणों के लिए किया जाना है और बस अपने व्यावसायिक तर्क का परीक्षण करना है और ड्राइंग / डिस्प्ले आदि को नहीं देखना है। यह प्राप्त करने के लिए कि आप प्रोग्रामेटिक रूप से व्यू ऑब्जेक्ट बना सकते हैं और कुछ भागों को मॉक कर सकते हैं जिन्हें एंड्रॉइड सिस्टम की जरूरत है ( मॉकिटो या पॉवर्मॉक जैसी किसी चीज़ का उपयोग करें ) । roboelectic में सरल दृश्य परीक्षण के उदाहरण:

MyCustomView view = new MyCustomView();
assertNotNull(view.setSomeNo(2);
assertTrue(2, view.getSomeNo());

इसके अलावा अगर आप यह देखना चाहते हैं कि आपका नजरिया कैसा है या प्रतिपादन आदि का परीक्षण करना चाहिए, तो आपको एस्प्रेसो या रोबोटियम जैसे कार्यात्मक परीक्षण ढांचे का उपयोग करना चाहिए जो एक वास्तविक डिवाइस पर चलते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.