Dan*_*n J 7 android robolectric android-gradle-plugin
我们正在尝试使用org.robolectric:robolectric:3.0我们自己的内部Nexus存储库中的依赖项.问题是Robolectric尝试在运行时从公共存储库加载一些依赖项(如此处所述),并忽略build.gradle中的任何存储库重写.
由于我们无法从Intranet访问该公共位置,因此在尝试加载该依赖项后,我的测试会超时:
[警告]无法从存储库sonatype(https://oss.sonatype.org/content/groups/public/)获取资源'org.robolectric:android-all:jar:5.0.0_r2-robolectric-1' :传输错误file:操作超时
Robolectric配置文档的底部部分建议将其添加到Gradle配置中以覆盖URL:
android {
testOptions {
unitTests.all {
systemProperty 'robolectric.dependency.repo.url', 'https://local-mirror/repo'
systemProperty 'robolectric.dependency.repo.id', 'local'
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我已经测试了,我从未看到系统属性被设置.我已经从我的自定义Robolectric运行器(扩展RobolectricGradleTestRunner)中打印出来,并且系统属性保持设置为null.
System.out.println("robolectric.dependency.repo.url: " + System.getProperty("robolectric.dependency.repo.url"));
Run Code Online (Sandbox Code Playgroud)
我也尝试做类似于这个评论的东西(但是这个方法不存在以覆盖RobolectricGradleTestRunner),我也尝试直接在我的自定义Robolectric跑步者中设置系统属性,这似乎没有帮助.
@Config(constants = BuildConfig.class)
public class CustomRobolectricRunner extends RobolectricGradleTestRunner {
private static final String BUILD_OUTPUT = "build/intermediates";
public CustomRobolectricRunner(Class<?> testClass) throws InitializationError {
super(testClass);
System.setProperty("robolectric.dependency.repo.url", "https://nexus.myinternaldomain.com/content");
System.setProperty("robolectric.dependency.repo.id", "internal");
System.out.println("robolectric.dependency.repo.url: " + System.getProperty("robolectric.dependency.repo.url"));
}
Run Code Online (Sandbox Code Playgroud)
该Robolectric源代码似乎并确认这些系统属性存在.
虽然没有直接使用性质的修复,另一种方式来得到这个工作是压倒一切getJarResolver()的RobolectricTestRunner子类,并在你的神器主人指点一下:
public final class MyTestRunner extends RobolectricTestRunner {
public MyTestRunner(Class<?> testClass) throws InitializationError {
super(testClass);
}
@Override protected DependencyResolver getJarResolver() {
return new CustomDependencyResolver();
}
static final class CustomDependencyResolver implements DependencyResolver {
private final Project project = new Project();
@Override public URL[] getLocalArtifactUrls(DependencyJar... dependencies) {
DependenciesTask dependenciesTask = new DependenciesTask();
RemoteRepository repository = new RemoteRepository();
repository.setUrl("https://my-nexus.example.com/content/groups/public");
repository.setId("my-nexus");
dependenciesTask.addConfiguredRemoteRepository(repository);
dependenciesTask.setProject(project);
for (DependencyJar dependencyJar : dependencies) {
Dependency dependency = new Dependency();
dependency.setArtifactId(dependencyJar.getArtifactId());
dependency.setGroupId(dependencyJar.getGroupId());
dependency.setType(dependencyJar.getType());
dependency.setVersion(dependencyJar.getVersion());
if (dependencyJar.getClassifier() != null) {
dependency.setClassifier(dependencyJar.getClassifier());
}
dependenciesTask.addDependency(dependency);
}
dependenciesTask.execute();
@SuppressWarnings("unchecked")
Hashtable<String, String> artifacts = project.getProperties();
URL[] urls = new URL[dependencies.length];
for (int i = 0; i < urls.length; i++) {
try {
urls[i] = Util.url(artifacts.get(key(dependencies[i])));
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
return urls;
}
@Override public URL getLocalArtifactUrl(DependencyJar dependency) {
URL[] urls = getLocalArtifactUrls(dependency);
if (urls.length > 0) {
return urls[0];
}
return null;
}
private String key(DependencyJar dependency) {
String key =
dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + dependency.getType();
if (dependency.getClassifier() != null) {
key += ":" + dependency.getClassifier();
}
return key;
}
}
}
Run Code Online (Sandbox Code Playgroud)
应该注意的是,这依赖于两个内部类型的Robolectric,因此在升级版本时应该小心.
您可以设置属性mavenRepositoryId和mavenRepositoryUrl的RoboSettings其被使用MavenDependencyResolver。
例:
public class CustomRobolectricRunner extends RobolectricGradleTestRunner {
static {
RoboSettings.setMavenRepositoryId("my-nexus");
RoboSettings.setMavenRepositoryUrl("https://my-nexus.example.com/content/groups/public");
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1812 次 |
| 最近记录: |