Java 机器人分子测量仪';t使用~config包名称空间属性

Java 机器人分子测量仪';t使用~config包名称空间属性,java,android,unit-testing,github,robolectric,Java,Android,Unit Testing,Github,Robolectric,我想将robolectric添加到一个现有的实时android dagger项目中 问题是AndroidManifest中的包名与R文件物理路径不一致 robolectric根据manifest“package_name”属性搜索R文件 我想在我的机器人分子测试中使用@Config @Config(manifest = " --my---path/AndroidManifest.xml", sdk = 21, packageName = "com.google.a

我想将robolectric添加到一个现有的实时android dagger项目中

问题是AndroidManifest中的包名与R文件物理路径不一致

robolectric根据manifest“package_name”属性搜索R文件

我想在我的机器人分子测试中使用@Config

@Config(manifest = " --my---path/AndroidManifest.xml",
        sdk = 21,
        packageName = "com.google.andorid.apps.ridematch",
        application = TestApplication.class)
但显然,“packageName”注释是无效的

我想在robolectric开源软件中调试这个, 但我不确定问题代码在哪里

这是我第一次为github开源项目做贡献的机会

我的尝试:

试试看(1) 我认为错误在代码中:

@Test
  public void shouldAssignThePackageNameFromTheManifest() throws Exception {
    AndroidManifest appManifest = newConfigWith("com.wacka.wa", "");
    Application application = defaultTestLifecycle.createApplication(null, appManifest, null);
    shadowOf(application).bind(appManifest, null);

    assertThat(application.getPackageName()).isEqualTo("com.wacka.wa");
    assertThat(application).isExactlyInstanceOf(Application.class);
  }
所以我写了这段代码:

  @Test
      public void shouldAssignThePackageNameFromConfigWhenHaveConfigAndManifest() throws Exception {
        AndroidManifest appManifest = newConfigWith("com.wacka.wa", "");

        Properties properties = new Properties();
        properties.put("packageName", "com.robolectric.MyTestClass");
        properties.put("application", "com.robolectric.TestTestApplication");
    //    properties.put("application", "FakeApp");

        Config config = Config.Implementation.fromProperties(properties);
        Application application = defaultTestLifecycle.createApplication(null, appManifest, config);
        shadowOf(application).bind(appManifest, null);

        assertThat(application.getPackageName()).isEqualTo("com.robolectric.MyTestClass");
        assertThat(application).isExactlyInstanceOf(TestTestApplication.class);
      }
在“bind”中,我使非空配置包名覆盖appManifest包名

但我找不到谁叫“defaultTestLifecycle.createApplication”

试试看(2) 我开始研究这个类及其测试:

 @Override
  protected AndroidManifest getAppManifest(Config config) {


I saw this test:



     @Ignore
      @Config(constants = BuildConfig.class, packageName = "fake.package.name")
      public static class PackageNameTest {

        @Test
        public void withoutAnnotation() throws Exception {
        }
      }
我还补充了我的观点:

     @Ignore
      @Config(constants = BuildConfig.class, packageName = "fake.package2.name", manifest = "//java/com/google/android/apps/ridematch/environments/debug:AndroidManifest.xml")
      public static class PackageNameConfigAndManifestTest {

        @Test
        public void withoutAnnotation() throws Exception {
        }
      }

但是测试通过了,所以bug不存在。

我再次问,为什么不使用
RobolectricGradleTestRunner
?正如所有教程所示。不