Robolectric inflates custom test views

I am trying to write some tests for a user view, but I am having problems with inflating a user view in my test case. The error I get is this

android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true at android.view.LayoutInflater.inflate(LayoutInflater.java:458) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at android.view.LayoutInflater.inflate(LayoutInflater.java:353) at com.androidas.models.ui.order.MyLocationViewTest.setUp(MyLocationViewTest.java:45) 

I even tried to do a dummy activity (TestActivity) with a tag in it to try to inflate it

 public class MyLocationView extends RelativeLayout { private TextView mTextEta; private TextView mTextOnTime; private Date mMeetTime; private CalendarManager mCalendarManager; public MyLocationView(Context context) { this(context, null); } public MyLocationView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyLocationView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater.from(context) .inflate(R.layout.v_mylocation, this, true); mTextEta = (TextView) findViewById(R.id.order_statusTracking_txt_myEta); mTextOnTime = (TextView) findViewById(R.id.order_statusTracking_txt_myDelay); } } 

layout

 <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" > <ImageView android:id="@+id/order_statusTracking_img_walking" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_walk" /> <TextView android:id="@+id/order_statusTracking_txt_myEta" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/spacing_small" android:layout_toRightOf="@+id/order_statusTracking_img_walking" android:layout_toEndOf="@+id/order_statusTracking_img_walking" android:gravity="center_vertical" tools:text="Arrive in 7min" style="@style/HeaderText" /> <TextView android:id="@+id/order_statusTracking_txt_myDelay" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/order_statusTracking_txt_myEta" android:layout_below="@+id/order_statusTracking_txt_myEta" android:layout_marginTop="@dimen/spacing_normal" tools:text="On Time" style="@style/InfoText.Black" /> </merge> 

and test case:

 @RunWith(RobolectricTestRunner.class) @Config(emulateSdk = 18) public class MyLocationViewTest { MyLocationView mLocation; TextView mTextDelay; Trip mTrip; CalendarManager mCalendarManager; Date meetupTime; @Before public void setUp() { Activity activity = Robolectric.buildActivity(TestActivity.class).create().get(); mLocation = (MyLocationView) LayoutInflater.from(activity).inflate(R.layout.v_mylocation, null); mTextDelay = (TextView) mLocation.findViewById(R.id.order_statusTracking_txt_myDelay); } 
+6
source share
1 answer

OK, 1 year later, but here is the weird thing that worked for me:

 MyCustomView mView = (MyCustomView) LayoutInflater .from(RuntimeEnvironment.application) .inflate(R.layout.my_custom_view_layout, new MyCustomView(RuntimeEnvironment.application), true); 
+5
source

Source: https://habr.com/ru/post/983616/


All Articles