簡體   English   中英

Android - 使用Robolectric測試字符串資源

[英]Android - Testing a string resource with Robolectric

我只想測試獲取一個String資源等於我認為它應該相等。 我的問題似乎是我的項目中有Realm。 我知道Robolectric不支持Realm(它在文檔中說明了它),但我根本沒有調用Realm,所以我覺得可能有辦法做到這一點。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import static org.junit.Assert.assertEquals;

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, manifest = "app/src/main/AndroidManifest.xml")
public class ResourceTester {

    @Test
    public void testingString() {
        String resourceString = RuntimeEnvironment.application.getString(R.string.app_name);
        assertEquals(resourceString, "Yeah");
    }

}

它看起來像它試圖調用境界

java.lang.UnsatisfiedLinkError: Can't load library: 
/var/folders/3x/ddxtg5fs1hxgqrp6h63vsc140000gp/T/android-tmp-
robolectric3612430387389787158/app_lib/librealm-jni.dylib.3.5.0

編輯:我嘗試了更多的東西,似乎在@Config注釋中設置manifest是問題,但后來我得到一個android.content.res.Resources$NotFoundException: unknown resource 2131362072

還有其他想法嗎? 我可以創建另一個不調用Realm Application類嗎? / test目錄如何知道?

編輯大衛:

我試過這個:

@RunWith(RobolectricGradleTestRunner.class)
@Config(application = TestingApplication.class, constants = BuildConfig.class, sdk = 21)
public class ResourceTester {
    @Test
    public void newTestingTests() throws Exception {
        String appName = RuntimeEnvironment.application.getString(R.string.app_name);
    }
}

但我得到一個:

android.content.res.Resources$NotFoundException: unknown resource 2131362072

如果我改成它

@RunWith(RobolectricTestRunner.class)
//@RunWith(RobolectricGradleTestRunner.class)
@Config(application = TestingApplication.class, constants = BuildConfig.class, sdk = 21)
public class ResourceTester {
    @Test
    public void newTestingTests() throws Exception {
        String appName = RuntimeEnvironment.application.getString(R.string.app_name);
    }
}

我明白了

WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only.
To remove this warning, annotate your test class with @Config(manifest=Config.NONE).

android.content.res.Resources$NotFoundException: unknown resource 2131362072

如果您有一個重量級的Application類(例如,依賴於Realm,Crashlytics等)並且您的單元測試沒有引用這些,您可以在配置中使用android.app.Application作為您的Application類:

@RunWith(RobolectricTestRunner.class)
@Config(application = android.app.Application.class, manifest="src/main/AndroidManifest.xml", sdk = 23)
public class ResourceTester {

如果您按照入門說明使用Mac或Linux,還要確保將Working Directory設置為$MODULE_DIR$

工作目錄中的模塊目錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM