मेरे पास एक एंड्रॉइड ऐप है जिसमें MyApplication
कक्षा है जो Application
से विरासत में है।प्रत्येक यूनिट परीक्षण के लिए मेरे आवेदन वर्ग का नया उदाहरण कैसे प्राप्त करें?
मैंने कुछ यूनिट परीक्षण बनाए हैं जो @RunWith(AndroidJUnit4.class)
के साथ चलते हैं। यदि मैं प्रत्येक परीक्षा को अलग से चलाता हूं तो वे सभी पास होते हैं। अगर मैं उन्हें एक साथ चलाता हूं - पहला एक गुजरता है और फिर (कुछ) अन्य विफल हो जाते हैं।
समस्या यह है कि ऐसा लगता है कि MyApplication
उसमें केवल एक ही बनाया जाता है और फिर इसे संरक्षित और सभी परीक्षण जिसकी वजह से विफल रहता है क्योंकि MyApplication
में एक राज्य में जो केवल एक बार प्रारंभ किया जाना चाहिए है वहाँ के लिए प्रयोग किया जाता है।
क्या यूनिट परीक्षण (एंड्रॉइडटेस्ट) चलाने का कोई तरीका है इसलिए प्रत्येक परीक्षण के लिए एप्लिकेशन पुनरारंभ किया जाता है? मुझे परवाह नहीं है कि यह धीमा हो जाएगा (उदाहरण के लिए ऐप को हर बार पुनर्स्थापित करना होगा) मैं सिर्फ परीक्षणों को एक-दूसरे से स्वतंत्र रूप से चलाने के लिए चाहता हूं। (के रूप में @Zinc द्वारा अनुरोध) इकाई परीक्षण से
वास्तविक कोड की तरह दिखता है:
@RunWith(AndroidJUnit4.class)
public class AutoLogin_ActMainTest {
@Rule
public ActivityTestRule<ActMain> mActivityRule = new ActivityTestRule<ActMain>(
ActMain.class) {
@Override
protected void beforeActivityLaunched() {
super.beforeActivityLaunched();
MyTestApp app = (MyTestApp) InstrumentationRegistry.getInstrumentation().getTargetContext().getApplicationContext();
DependencyInjector.reset();
app.reset();
FakeUnitDaggerModule fudm = new FakeUnitDaggerModule();
Session session = new SessionImpl(new TimeProviderImpl());
fudm.setResMain(new ResMainTest(session));
FakeAppPrefs appPrefs = new FakeAppPrefs();
FakeLoginPrefs loginPrefs = new FakeLoginPrefs();
CurrentUserHolder currentUserHolder = new CurrentUserHolder();
FakeComponent inj = DaggerFakeComponent.builder().
fakeMyAppDaggerModule(new FakeMyAppDaggerModule(app, appPrefs, loginPrefs, currentUserHolder)).
appInfoDaggerModule(new AppInfoDaggerModule("1")).
fakeSessionDaggerModule(new FakeSessionDaggerModule(session)).
fakeExchangeDaggerModule(new FakeExchangeDaggerModule("https://test.com")).
fakeUnitDaggerModule(fudm).
build();
DependencyInjector.init(inj);
DependencyInjector.getInstance().inject(app);
app.onStart();
}
};
@Test
public void testAutoLogin() {
ElapsedTimeIdlingResource idlingResource = new ElapsedTimeIdlingResource(500);
Espresso.registerIdlingResources(idlingResource);
idlingResource.startWaiting();
onView(ViewMatchers.withId(R.id.tv_logged_in_as)).check(matches(isDisplayed()));
Espresso.unregisterIdlingResources(idlingResource);
}
}
क्या आप अपना कोड साझा कर सकते हैं? – Zinc
@Zinc परीक्षणों में से एक से कोड जोड़ा गया – Ognyan
आप डिगर का उपयोग क्यों नहीं कर रहे हैं? – Saveen