我们正在尝试使用 Android Studio 中的 Robolectric 测试框架来测试 Facebook API。 Facebook 登录按钮有效,因此 Facebook API 正常工作。但是,以下测试失败:
package com.airportapp.test.Models;
import android.app.Activity;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;
import org.robolectric.Robolectric;
import com.airportapp.test.MyRobolectricTestRunner;
import com.airportapp.LoginActivity;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(MyRobolectricTestRunner.class)
public class LoginActivityTest {
@Before
public void setup() {
//do whatever is necessary before every test
}
@Test
public void testActivityFound() {
Activity activity = Robolectric.buildActivity(LoginActivity.class).create().get();
Assert.assertNotNull(activity);
}
}
错误是当我们运行测试时 Android Studio 找不到 android.support 文件。您可以在此处看到错误:
出现的另一个错误是: android.view.InflateException:XML 文件 app/src/main/res/layout/activity_login.xml 第 #-1 行(抱歉,尚未实现):错误膨胀类 com.facebook.widget.LoginButton
所以 Android Studio 也不满意 facebook 登录按钮 :( 但它有效...我们认为我们需要导入一些东西,但我们不知道把它放在哪里。
最佳答案
InflateException
是因为 Robolectric 无法从 Facebook SDK 中找到资源。要解决此问题,必须更新 project.properties
文件以指向 Facebook SDK 项目。通过向其中添加以下行来执行此操作:
android.library.reference.1={Path}
{Path}
应该是相对路径,从 project.properties 文件到包含 Facebook SDK 项目的 AndroidManifest.xml
的文件夹。在我的例子中是 ../../build/intermediates/exploded-aar/com.facebook.android/facebook/3.21.0
。
请注意,这适用于所有包含 Robolectric 找不到的资源的 Android 库项目。进一步阅读:here和 here .此外,可以找到有关 project.properties
的更多文档 here .请注意,在我的项目中,Robolectric 测试位于 Android 应用项目本身。因此,您也可以尝试将 project.properties
文件放在与用于测试的 AndroidManifest.xml
相同的目录中。
至于你的第一个问题;我没有个人经验。但这似乎是因为 Gradle 在编译单元测试时找不到支持库。 this的答案问题应该解决它。
关于使用 Robolectric : not recognizing Facebook SDK 进行 Android 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321321/