我们正在尝试在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第#行(对不起,尚未实现):错误输出类com.facebook.widget.LoginButton
所以Android Studio对facebook登录按钮也不满意:(但它有效......我们认为我们需要导入一些内容,但我们不知道该把它放在哪里。
答案 0 :(得分:1)
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
。
请注意,这适用于所有Android库项目,其中包含Robolectric找不到的资源。进一步阅读:here和here。此外,还可以找到有关project.properties
的更多文档here。请注意,在我的项目中,Robolectric测试位于Android应用程序项目中。因此,您也可以尝试将project.properties
文件放在与用于测试的AndroidManifest.xml
相同的目录中。
至于你的第一个问题;我没有个人经验。但似乎是因为Gradle在编译单元测试时找不到支持库。 this问题的答案应该解决它。