android - ब्रेड बनाने की विधि हिंदी में




एंड्रॉइड एस्प्रेसो में टोस्ट संदेश की जांच (4)

क्या किसी को पता होगा कि एंड्रॉइड एस्प्रेसो में टोस्ट संदेश की उपस्थिति के लिए परीक्षण कैसे करें? रोबोटियम में यह आसान है और मैंने प्रयोग किया लेकिन एस्प्रेसो में काम करना शुरू कर दिया लेकिन सटीक कमांड नहीं मिला।


टोस्ट्स को लागू करने का तरीका एक टोस्ट का पता लगाना संभव बनाता है। हालांकि यह देखने का कोई तरीका नहीं है कि टोस्ट से अनुरोध किया गया है ()) या शो () के बीच की अवधि के बीच ब्लॉक करने के लिए और जब टोस्ट दिखाई दे रहा है। यह अनजान समय के मुद्दों को खुलता है (कि आप केवल नींद और आशा के माध्यम से संबोधित कर सकते हैं)।

यदि आप वास्तव में इसे सत्यापित करना चाहते हैं, तो यहां मॉकिटो और एक परीक्षण जासूस का उपयोग करके एक बहुत ही सुंदर विकल्प नहीं है:

public interface Toaster {
 public void showToast(Toast t);

 private static class RealToaster {
  @Override
  public void showToast(Toast t) {
    t.show();
  }

 public static Toaster makeToaster() {
   return new RealToaster();
 }
}

Then in your test

public void testMyThing() {
 Toaster spyToaster = Mockito.spy(Toaster.makeToaster());
 getActivity().setToaster(spyToaster);
 onView(withId(R.button)).perform(click());
 getInstrumentation().runOnMainSync(new Runnable() {
 @Override
  public void run() {
   // must do this on the main thread because the matcher will be interrogating a view...
   Mockito.verify(spyToaster).showToast(allOf(withDuration(Toast.LENGTH_SHORT), withView(withText("hello world"));
 });
}

// create a matcher that calls getDuration() on the toast object
Matcher<Toast> withDuration(int)
// create a matcher that calls getView() and applies the given view matcher
Matcher<Toast> withView(Matcher<View> viewMatcher)




another answer regarding this 




if(someToast == null)
    someToast = Toast.makeText(this, "sdfdsf", Toast.LENGTH_LONG);
boolean isShown = someToast.getView().isShown();

यह थोड़ा लंबा कथन मेरे लिए काम करता है:

import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.RootMatchers.withDecorView;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
....
onView(withText(R.string.TOAST_STRING)).inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))).check(matches(isDisplayed()));

सबसे पहले एक कटऑम टोस्ट मैचर बनाएं जिसे हम अपने परीक्षण मामलों में उपयोग कर सकते हैं -

public class ToastMatcher extends TypeSafeMatcher<Root> {

    @Override    public void describeTo(Description description) {
        description.appendText("is toast");
    }

    @Override    public boolean matchesSafely(Root root) {
        int type = root.getWindowLayoutParams().get().type;
        if ((type == WindowManager.LayoutParams.TYPE_TOAST)) {
            IBinder windowToken = root.getDecorView().getWindowToken();
            IBinder appToken = root.getDecorView().getApplicationWindowToken();
            if (windowToken == appToken) {
              //means this window isn't contained by any other windows. 
            }
        }
        return false;
    }

1. टेस्ट संदेश प्रदर्शित होने पर परीक्षण करें

onView(withText(R.string.mssage)).inRoot(new ToastMatcher())
.check(matches(isDisplayed()));

2. परीक्षण करें कि टोस्ट संदेश प्रदर्शित नहीं होता है

onView(withText(R.string.mssage)).inRoot(new ToastMatcher())
.check(matches(not(isDisplayed())));

3. टोस्ट टेस्ट आईडी में विशिष्ट टेक्स्ट संदेश होता है

onView(withText(R.string.mssage)).inRoot(new ToastMatcher())
.check(matches(withText("Invalid Name"));

धन्यवाद, अनुजा

नोट - यह उत्तर इस पोस्ट से है।


स्वीकृत उत्तर एक अच्छा है लेकिन मेरे लिए काम नहीं किया। इसलिए मैंने थोड़ी सी खोज की और इस ब्लॉग आलेख को पाया। इससे मुझे यह पता चला कि इसे कैसे किया जाए और मैंने ऊपर दिए गए समाधान को अपडेट किया।

सबसे पहले मैंने टोस्टमैचर को लागू किया:

import android.os.IBinder;
import android.support.test.espresso.Root;
import android.view.WindowManager;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;

public class ToastMatcher extends TypeSafeMatcher<Root> {

  @Override
  public void describeTo(Description description) {
    description.appendText("is toast");
  }

  @Override
  public boolean matchesSafely(Root root) {
    int type = root.getWindowLayoutParams().get().type;
    if (type == WindowManager.LayoutParams.TYPE_TOAST) {
        IBinder windowToken = root.getDecorView().getWindowToken();
        IBinder appToken = root.getDecorView().getApplicationWindowToken();
        if (windowToken == appToken) {
            // windowToken == appToken means this window isn't contained by any other windows.
            // if it was a window for an activity, it would have TYPE_BASE_APPLICATION.
            return true;
        }
    }
    return false;
  }

}

फिर मैंने इस तरह के चेक विधियों को लागू किया:

public void isToastMessageDisplayed(int textId) {
    onView(withText(textId)).inRoot(MobileViewMatchers.isToast()).check(matches(isDisplayed()));
}

MobileViewMatchers matchers तक पहुंचने के लिए एक कंटेनर है। वहां मैंने स्थिर विधि को परिभाषित किया है isToast()

public static Matcher<Root> isToast() {
    return new ToastMatcher();
}

यह मेरे लिए एक आकर्षण की तरह काम करता है।







toast