2017-07-20 5 views
3

文字列リソースを取得することが同等でなければならないと思っていることをテストしたいだけです。私の問題は、自分のプロジェクトにレルムがあることにあるようです。私はRobolectricがRealmをサポートしていないことを知っていますが、それはRealmを呼び出すわけではないので、これを行う方法があるように感じます。Android - Robolectricで文字列リソースをテストする

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 

EDIT:は、私はいくつかのより多くの事を試みたが、それは@Config注釈にmanifestを設定することのように思えます問題が、その後私は得るandroid.content.res.Resources$NotFoundException: unknown resource 2131362072

他の考えですか? Realmが呼び出されていない別のアプリケーションクラスを作成できますか?/testディレクトリはそれをどのように知っていますか? DAVID FOR

EDIT:

私はこの試みた:

@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); 
    } 
} 
に変更した場合210

あなたはヘビー級Applicationクラス(例えば、レルムの依存関係を持つ、Crashlyticsなど)を持っているし、あなたのユニットテストは、あなたがあなたのアプリケーションクラスとしてandroid.app.Application使用することができ、これらを参照していない場合、私は

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 
+0

Robolectricのバージョンはこれですか? – EpicPandaForce

+0

@EpicPandaForce私は現在robolectric 3.0を使用していますが、3.0以上のバージョンを使用しても構いません。 – EGHDK

+0

Robolectricが呼び出すカスタムアプリケーションクラスがあり、そのクラスはテスト中にRealm.init(Context)を呼び出しますか? – EpicPandaForce

答えて

7

を取得設定:

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

また、あなたがgetting started instructions

0あたりとしてMacやLinuxを使用している場合は、$MODULE_DIR$Working Directoryセットを持っていることを確認してください

+0

うーん...私は今私が近くにいるように感じる。私の編集を確認してください。また、すでに$ MODULE_DIRS $を追加しました。それについてのリマインダをありがとう。 – EGHDK

+0

これをデバッグする方法はありますか?たとえば...テストでロードされたリソース/パッケージ/ディレクトリを確認してください。 – EGHDK

+0

@EGHDKテストランナーの引数にマニフェストを追加できますか? 'app/src/main/AndroidManifestでなければなりません。xml'または 'src/main/AndroidManifest.xml'を実行します。モジュールのディレクトリを変更した場合は、Android Studioを再起動する必要があります。テストのためにカスタムアプリケーションを使用している場合は 'constants = Build.config'を削除してください。だから私が私の例で書いたコードに可能な限り近づけてください。 –

関連する問題