2012-07-12 47 views
3

我正在爲android編寫一個演示應用程序,使用robolectric for TA。我可以運行該項目,但是當我添加的測試中,它顯示了這樣的錯誤:Maven + Robolectric,找不到該資源?

error message="java.lang.RuntimeException: no such directory /Users/majie/Downloads/android-sdk-macosx/platforms/android-9/data/res/values" type="java.lang.RuntimeException">java.lang.RuntimeException: java.lang.RuntimeException: no such directory /Users/majie/Downloads/android-sdk-macosx/platforms/android-9/data/res/values 
at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:93) 
at com.xtremelabs.robolectric.res.ResourceLoader.inflateView(ResourceLoader.java:261) 
at com.xtremelabs.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:43) 
at com.xtremelabs.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:48) 
at android.view.LayoutInflater.inflate(LayoutInflater.java) 
at com.xtremelabs.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:73) 
at android.app.Activity.setContentView(Activity.java) 
at com.cisco.jabberim.ui.WelcomeActivity.onCreate(WelcomeActivity.java:21) 
at Test.FTE.WelcomeActivityTest.setUp(WelcomeActivityTest.java:28) 

測試文件如下:

@RunWith(RobolectricTestRunner.class) 
public class WelcomeActivityTest { 
private WelcomeActivity mActivity; 
private TextView text; 

@Before 
public void setUp(){ 
    mActivity = new WelcomeActivity(); 
    mActivity.onCreate(null); 
    text = (TextView) mActivity.findViewById(R.id.welcome); 
} 

@Test 
public void textIsNotNull(){ 
    String str = text.getText().toString(); 
    assertNotNull(str); 
} 
} 

pom.xml中是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven- v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>im</groupId> 
<artifactId>Im</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<packaging>apk</packaging> 
<name>IM demo</name> 

<dependencies> 
    <dependency> 
     <groupId>android</groupId> 
     <artifactId>android</artifactId> 
     <version>3.0_r2</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Make sure this is below the android dependencies --> 
    <dependency> 
     <groupId>com.pivotallabs</groupId> 
     <artifactId>robolectric</artifactId> 
     <version>1.0-RC1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.2</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>${project.artifactId}</finalName> 

    <plugins> 
     <plugin> 
      <!-- See http://code.google.com/p/maven-android-plugin/ --> 
      <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
      <artifactId>android-maven-plugin</artifactId> 
      <version>3.2.0</version> 
      <configuration> 
       <sdk> 
        <!-- platform or api level (api level 8 = platform 2.2)--> 
        <platform>11</platform> 
       </sdk>   
      </configuration> 
      <extensions>true</extensions> 
     </plugin> 
    </plugins> 
</build> 

我真的不知道如何解決它。我不知道爲什麼奇怪的路徑是「/用戶/ majie /下載/ android-sdk-macosx /平臺/ android-9/data/res /值」。我不知道該把它放在哪裏,或者如何做對。

+0

您是否從Android SDK Manager下載了Android 9 SDK? – yorkw 2012-07-15 23:13:56

回答

0

我發現,在資源加載源

private String getAndroidResourcePathFromSystemEnvironment() { 
    // Hand tested 
    String resourcePath = System.getenv().get("ANDROID_HOME"); 
    if (resourcePath != null) { 
     return new File(resourcePath, getAndroidResourceSubPath()).toString(); 
    } 
    return null; 
} 

所以我認爲你必須嘗試ANDROID_HOME環境變量。

+0

.bash_profile中的ANDROID_HOME導出爲ANDROID_HOME =/Users/majie/Downloads // android-sdk-macosx。我不認爲這是錯的。順便說一句,沒有測試,我可以建立這個項目。那麼是否有某處需要在robolectric中配置路徑? – mjgrrrr 2012-07-13 02:36:22

0

使用robolectric罐子(而不是RC1)的1.0版本修復了這個問題對我來說

<dependency> 
     <groupId>com.pivotallabs</groupId> 
     <artifactId>robolectric</artifactId> 
     <version>1.0</version> 
     <scope>test</scope> 
</dependency> 
-2

這是Robolectric需要/用戶/馬街鄉/下載/ Android的SDK-的MacOSX /平臺/ Android的9/data/res/values但實際上在您的計算機中不存在。

這個容易解決 只要下載Android的SDK 9或複製其他SDK如Android-8,以及與Android的9

重命名它,然後它會被確定。