Android Studio 3.0 Beta2
classpath 'com.Android.tools.build:gradle:3.0.0-beta3'
testCompile 'org.robolectric:robolectric:3.4.2'
私が使用しているテストクラスは実行に失敗します:
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.Lollipop)
@RunWith(RobolectricTestRunner.class)
public class RecipeAdapterTest {
private MainActivity activity;
@Before
public void setup() {
activity = Robolectric.setupActivity(MainActivity.class);
/* Also tried this same Error
activity = Robolectric.buildActivity(MainActivity)
.create()
.resume()
.get();
*/
}
@Test
public void testActivityShouldNotBeNull() {
assertThat(activity, is(notNullValue()));
}
}
これはエラーのスタックトレースです:
Android.content.res.Resources$NotFoundException: String resource ID #0x7f0c0020
at Android.content.res.Resources.getText(Resources.Java:274)
at Android.content.res.Resources.getString(Resources.Java:360)
at Android.content.Context.getString(Context.Java:376)
at org.robolectric.shadows.ShadowActivity.getActivityTitle(ShadowActivity.Java:100)
at org.robolectric.shadows.ShadowActivity.callAttach(ShadowActivity.Java:110)
at org.robolectric.Android.controller.ActivityController.attach(ActivityController.Java:56)
at org.robolectric.Android.controller.ActivityController.of(ActivityController.Java:25)
at org.robolectric.Robolectric.buildActivity(Robolectric.Java:98)
at org.robolectric.Robolectric.buildActivity(Robolectric.Java:94)
at org.robolectric.Robolectric.setupActivity(Robolectric.Java:102)
at me.androidbox.busbybaking.adapters.RecipeAdapterTest.setup(RecipeAdapterTest.Java:63)
Edit Configurations
で、Working Directory
を$MODULE_DIR$
に設定しました
提案に感謝します。
前述のとおり Googleチームのエンジニアによる(おそらく Xavier Ducrohet )、RobolectricにはAAPT2の問題があります。
Robolectricはaapt2と互換性がありません。
ここに2つのオプションがあります。
最初のオプション-Robolectricに従います Android Studio 3.0 + のガイドライン
Build.gradleに次を追加します。
Android {
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
Robolectricテストランナーでテストに注釈を付けます。
@RunWith(RobolectricTestRunner.class)
public class SandwichTest {
}
2番目のオプション:AAPT2を無効にして、次の行をgradle.properties
ファイルに追加します。
Android.enableAapt2=false
Robolectric documentation は、Android Studio 3.xで次の構成を使用する必要があることを示しています。
Android {
testOptions {
unitTests.includeAndroidResources true
}
}
AAPT2
リソース処理の問題が原因でビルドが失敗した場合、またはRoboelectric
を使用する場合は、AAPT2
Android.enableAapt2=false
をgradle.properties
ファイルに設定し、 を実行してGradleデーモンを再起動する./gradlew --stop
コマンドラインから。
公式ガイドラインAndroid Studio 3.0リリース
(同様の問題の解決策を探しているかもしれない人のために)
必ず使用してください
RuntimeEnvironment.application
およびnot:
RuntimeEnvironment.systemContext
リソースを「手動で」解決しようとしているとき。
それはResources$NotFoundException
はRobolectric
と表示される場合があります。
私はエスプレッソを使用していたため、テストリソースではなくアプリリソースを使用する必要がありました。
代わりに
InstrumentationRegistry.getInstrumentation().context.resources.getString("key")
私は使った
activityRule.activity.getString("key")