2015-03-10 9 views
6

Ich versuche, einige Tests für eine benutzerdefinierte Ansicht zu schreiben, aber ich habe Probleme beim Aufblasen der benutzerdefinierten Ansicht in meinem Testfall. Der Fehler, den ich bekommen istRobolectric aufblasen benutzerdefinierte Ansichten für Tests

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) 

Ich habe sogar versucht, eine Dummy-Aktivität (TestActivity) mit einem Tag in es machen, es zu versuchen

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> 

und Testfall aufzublasen :

@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); 
} 
+0

hast du Lösung für diese bekommen? –

Antwort

5

OK, 1 y Ohr später aber hier ist die seltsame Sache, die für mich gearbeitet:

MyCustomView mView = (MyCustomView) LayoutInflater 
     .from(RuntimeEnvironment.application) 
     .inflate(R.layout.my_custom_view_layout, 
       new MyCustomView(RuntimeEnvironment.application), 
       true); 
Verwandte Themen