Articles of robolectric

如何让Robolectric选择一个特定的微调项目

我是Robolectric的新手并且遇到了障碍。 我有一些自定义事件,在spinner中选择一个项目时触发,我想用robolectric测试它。 我看到ShadowSpinner类提供了诸如stateSpinner.clickFirstItemContainingText之类的辅助函数来单击特定项。 我用适当的值填充我的微调器,我测试打印出每个项目 for (int i = 0; i < spinner_items.length; ++i) { spinner_items[i] = (String) spinner.getAdapter().getItem(i); } System.out.println("Spinner Items " + Arrays.asList(spinner_items).toString()); 但是当我使用clickFirstItemContainingText和其中一个popoulated值时,我得到一个IllegalArgumentException。 没有find包含上述代码奇怪的测试的项目表明特定值确实存在。 任何帮助将不胜感激

配置Robolectric,Android Studio和Gradle以获取测试应用程序

我正在尝试使用gradle的Android Studio 0.5.8。 我当前的根构建文件: buildscript { repositories { mavenCentral() maven { url ‘https://oss.sonatype.org/content/repositories/snapshots’ } } dependencies { classpath ‘com.android.tools.build:gradle:0.9.+’ classpath ‘com.novoda.gradle:robolectric-plugin:0.0.1-SNAPSHOT’ } } allprojects { repositories { mavenCentral() maven { url ‘https://oss.sonatype.org/content/repositories/snapshots’ } } } 我的app build.gradle: apply plugin: ‘android’ apply plugin: ‘robolectric’ android { compileSdkVersion 19 buildToolsVersion “19.0.3” dependencies { androidTestCompile ‘org.robolectric:robolectric:2.3-SNAPSHOT’ androidTestCompile ‘org.mockito:mockito-all:1.9.5’ […]

从gradle运行单个Android(单元)测试,而不加载其他项目依赖项

我正在使用Jake Wharton的精彩插件进行Androidunit testing。 我努力让这些unit testing运行的目的是为了速度(TDD快速反馈和所有)。 我已经设法正确配置它并运行一些示例测试,如下所示: ./gradlew test 每当我运行测试时,我会注意到以下输出: Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0 The Test.testReportDir property has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the Test.getReports().getHtml().getDestination() property instead. The TaskContainer.add() […]

使用v7支持库AlertDialog时Robolectric InflateException

使用普通的android.app.AlertDialog与ShadowAlertDialog.getLatestAlertDialog() ,但如果使用支持库android.support.v7.app.AlertDialog ,则会发生以下exception: android.view.InflateException: XML file app/build/intermediates/res/qa/debug/layout/abc_alert_dialog_material.xml line #-1 (sorry, not yet implemented): Error inflating class android.support.v7.internal.widget.DialogTitle at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at android.view.LayoutInflater.inflate(LayoutInflater.java:353) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:75) at android.support.v7.app.AlertController.installContent(AlertController.java:216) at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:240) at android.app.Dialog.dispatchOnCreate(Dialog.java:361) at android.app.Dialog.show(Dialog.java:262) at org.robolectric.shadows.ShadowDialog.show(ShadowDialog.java:65) at android.app.Dialog.show(Dialog.java) Caused by: java.lang.StringIndexOutOfBoundsException: String index out […]

使用Robolectric测试okHttp请求 – 回调

我有一个函数,我想测试哪个在okHttp回调中运行。 我正在尝试使用Robolectrics进行测试,但回调从未执行过。 我认为这是因为测试在请求之后继续而不等待okHttp返回。 到目前为止,我已经尝试过: ShadowLooper.pauseMainLooper(); Robolectric.flushBackgroundScheduler(); ShadowLooper.unPauseMainLooper(); 但那没用。 有什么建议么? 编辑: 这是我的代码示例: ApiClient.sendSomeDataToServer(data, callback); 其中ApiClient是包含okHttp客户端的帮助程序类。 sendSomeDataToServer API调用看起来像这样: public static void sendSomeDataToServer(MyObject data, Callback callback){ final Request request = new Request.Builder() .url(API_SOME_URL) .post(RequestBody.create(JSON, myObject.getAsJson().toString())) .build(); sHttpClient.newCall(request).enqueue(callback); } 其中sHttpClient是初始化的OkHttpClient。 我可以通过在我的测试代码中强制Thread.sleep(5000)并提供自定义回调来测试上面的执行。 我试图测试的代码是在回调中。 有什么建议我可以测试吗? 我真的不想改变主要代码以适应测试框架 – 应该反过来。

将解析信息添加到Robolectric包管理器

这个问题非常类似于我想要做的事情: 我如何用Robolectric来影响PackageManager 但是,所有答案都依赖于ShadowApplication.setPackageManager()。 在2.2中,这种方法似乎不再存在: http : //robolectric.org/javadoc/org/robolectric/shadows/ShadowApplication.html 我试图抓住包管理器并添加解析信息: RobolectricPackageManager packageManager = (RobolectricPackageManager) Robolectric.application.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN,null); intent.addCategory(Intent.CATEGORY_HOME); ResolveInfo ri = new ResolveInfo(); ActivityInfo ai = new ActivityInfo(); ai.packageName = “com.fun.test”; ri.activityInfo = ai; ri.isDefault = true; packageManager.addResolveInfoForIntent(intent, ri); 但无济于事。 有谁知道如何做到这一点?

Robolectric:如何测试里面使用应用程序实例的类?

我想测试一个包含variablesPlateformConnect的片段UserConnectFragment 。 这个类有一个初始化Facebook SDK的方法: @Override public void create() { FacebookSdk.sdkInitialize(MyApplication.getInstance().getApplicationContext()); } 我用MyApplication类扩展了Android应用程序。 在UserConnectFragment中 ,我使用PlateformConnect: @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Must be done before the content view assignement! PlateformConnect.getInstance().create(); … 在我的Robolectric类测试中: @Before public void setUp() throws Exception { // Create basic activity, and add fragment mActivity = Robolectric.buildActivity(FragmentActivity.class).create().start().resume().get(); mUserConnectFragment = […]

Robolectric 2.1和Eclipse

Robolectric似乎是一个非常有趣的替代Android应用程序测试,但我无法正确地将它与我的Eclipse环境集成。 使用最新的robolectric版本2.1和android sdk 8,我遵循robolectric网站上描述的Eclipse设置步骤,但没有运气。 当我运行新创建的运行配置时,测试将停止以下错误。 我不知道为什么我的pakpak .R类无法find,ro.build.date.utc是什么? 症状或问题? WARNING: no system properties value for ro.build.date.utc java.lang.RuntimeException: java.lang.ClassNotFoundException: com.googlecode.pakpak.android.R at org.robolectric.AndroidManifest.getRClass(AndroidManifest.java:102) at org.robolectric.AndroidManifest.getResourcePath(AndroidManifest.java:275) at org.robolectric.AndroidManifest.getIncludedResourcePaths(AndroidManifest.java:280) at org.robolectric.AndroidManifest.getIncludedResourcePaths(AndroidManifest.java:282) at org.robolectric.RobolectricTestRunner.createAppResourceLoader(RobolectricTestRunner.java:590) at org.robolectric.RobolectricTestRunner.getAppResourceLoader(RobolectricTestRunner.java:582) at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:66) at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:392) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:232) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:181) at […]

使用Robolectric 3.0测试碎片

我有两个片段附加到一个活动。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LoginFragment loginFragment = new LoginFragment(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(android.R.id.content,loginFragment); fragmentTransaction.commit(); } public void userReg(View view){ RegisterFragment regFragment = new RegisterFragment(); FragmentManager fragmentManager1 = getSupportFragmentManager(); FragmentTransaction fragmentTransaction1 = fragmentManager1.beginTransaction(); fragmentTransaction1.addToBackStack(“added”); fragmentTransaction1.replace(android.R.id.content,regFragment); fragmentTransaction1.commit(); } } 注册片段通过按钮附加。 现在我想在robolectric […]

Robolectric – 应用程序在设置中有单例,导致测试问题

我目前inheritance了一个代码覆盖率为零的Android应用程序,我的第一个工作就是为它编写一些unit testing。 所以我决定也把它作为学习Robolectric的机会。 但是我遇到了初始问题,需要运行两个简单的虚拟测试。 这是我的测试文件中的代码: @Config(constants = BuildConfig.class) @RunWith(RobolectricGradleTestRunner.class) public class SplashActivityTest { private SplashActivity activity; // @Before => JUnit 4 annotation that specifies this method should run before each test is run // Useful to do setup for objects that are needed in the test @Before public void setup() { // Convenience method to […]