为 android 设置 Roboelectric 测试
Setting up Roboelectric testing for android
我正在尝试向我的应用程序添加一些 Roboelectric 单元测试。
使用 Roboelectric 3.0,我希望能够测试我的 activity PinActivity 和其中的片段。
import android.support.v7.app.AppCompatActivity;
import android.app.Fragment;
PinActivity extends AppCompatActivity {
gradle 文件包含:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
testCompile "org.robolectric:robolectric:3.0"
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
PinActivityTest 包含:(编辑添加@Config 未修复)
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import static org.junit.Assert.*;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class PinActivityTest {
@Test
public void onCreate_shouldInflateLayout() throws Exception {
PinActivity activity = Robolectric.buildActivity(PinActivity.class).create().get();
assertNotNull(activity);
}
目前正在获取:
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).
和 java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
为什么它找不到我的 AndroidManifest?
任何人都知道我如何使用类似示例修复这个或更多 Roboelectric 教程?
正如日志所说,您忘记了 @Config
注释,因此找不到您的 AndroidManifest 文件:
试试这个:
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21) public class PinActivityTest {
@Test
public void onCreate_shouldInflateLayout() throws Exception {
PinActivity activity = Robolectric.buildActivity(PinActivity.class).create().get();
assertNotNull(activity);
}
由于 Roboelectric 不支持 API23,我将测试 sdk 设置为 API 21.
编辑:同时更改:
PinActivity activity = Robolectric.buildActivity(PinActivity.class).create().get()
至
PinActivity activity = Robolectric.setupActivity(PinActivity.class);
注意:我的 Robolectric 依赖项现在看起来是:
testCompile("org.robolectric:robolectric:3.0") {
exclude module: 'classworlds'
exclude module: 'commons-logging'
exclude module: 'httpclient'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-project'
exclude module: 'maven-settings'
exclude module: 'plexus-container-default'
exclude module: 'plexus-interpolation'
exclude module: 'plexus-utils'
exclude module: 'wagon-file'
exclude module: 'wagon-http-lightweight'
exclude module: 'wagon-provider-api'
}
如有任何问题,欢迎随时提问。
希望对您有所帮助
我正在尝试向我的应用程序添加一些 Roboelectric 单元测试。 使用 Roboelectric 3.0,我希望能够测试我的 activity PinActivity 和其中的片段。
import android.support.v7.app.AppCompatActivity;
import android.app.Fragment;
PinActivity extends AppCompatActivity {
gradle 文件包含:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
testCompile "org.robolectric:robolectric:3.0"
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
PinActivityTest 包含:(编辑添加@Config 未修复)
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import static org.junit.Assert.*;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class PinActivityTest {
@Test
public void onCreate_shouldInflateLayout() throws Exception {
PinActivity activity = Robolectric.buildActivity(PinActivity.class).create().get();
assertNotNull(activity);
}
目前正在获取:
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).
和 java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
为什么它找不到我的 AndroidManifest? 任何人都知道我如何使用类似示例修复这个或更多 Roboelectric 教程?
正如日志所说,您忘记了 @Config
注释,因此找不到您的 AndroidManifest 文件:
试试这个:
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21) public class PinActivityTest {
@Test
public void onCreate_shouldInflateLayout() throws Exception {
PinActivity activity = Robolectric.buildActivity(PinActivity.class).create().get();
assertNotNull(activity);
}
由于 Roboelectric 不支持 API23,我将测试 sdk 设置为 API 21.
编辑:同时更改:
PinActivity activity = Robolectric.buildActivity(PinActivity.class).create().get()
至
PinActivity activity = Robolectric.setupActivity(PinActivity.class);
注意:我的 Robolectric 依赖项现在看起来是:
testCompile("org.robolectric:robolectric:3.0") {
exclude module: 'classworlds'
exclude module: 'commons-logging'
exclude module: 'httpclient'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-project'
exclude module: 'maven-settings'
exclude module: 'plexus-container-default'
exclude module: 'plexus-interpolation'
exclude module: 'plexus-utils'
exclude module: 'wagon-file'
exclude module: 'wagon-http-lightweight'
exclude module: 'wagon-provider-api'
}
如有任何问题,欢迎随时提问。
希望对您有所帮助