使用Robolectric进行Android测试:无法识别Facebook SDK

时间:2014-10-12 02:41:51

标签: android facebook

我们正在尝试在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文件。您可以在此处看到错误:enter image description here

显示的另一个错误是: android.view.InflateException:XML文件app / src / main / res / layout / activity_login.xml第#行(对不起,尚未实现):错误输出类com.facebook.widget.LoginButton

所以Android Studio对facebook登录按钮也不满意:(但它有效......我们认为我们需要导入一些内容,但我们不知道该把它放在哪里。

1 个答案:

答案 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找不到的资源。进一步阅读:herehere。此外,还可以找到有关project.properties的更多文档here。请注意,在我的项目中,Robolectric测试位于Android应用程序项目中。因此,您也可以尝试将project.properties文件放在与用于测试的AndroidManifest.xml相同的目录中。

至于你的第一个问题;我没有个人经验。但似乎是因为Gradle在编译单元测试时找不到支持库。 this问题的答案应该解决它。