我的项目有两组不同的测试.一个组仅使用默认运行,另一个组AndroidJUnitRunner必须使用自定义实现运行TestRunner extends MonitoringInstrumentation.
目前我每次需要运行另一组测试时都会testInstrumentationRunner通过编辑来切换build.gradle:
android{
defaultConfig {
//testInstrumentationRunner "my.custom.TestRunner"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道口味可以有自己的味道,testInstrumentationRunner但我目前的应用程序已经有2个flavourDimensions.使用flavor实际上是为了拥有不同版本的app.我需要2个版本的测试应用程序,都使用不同的testInstrumentationRunners 测试相同的应用程序.
我尝试testInstrumentationRunner通过迭代所有测试变体来改变.实际上有多个testInstrumentationRunner属性:
android.testVariants.all { TestVariant variant ->
//readonly
variant.variantData.variantConfiguration.instrumentationRunner
variant.variantData.variantConfiguration.defaultConfig.testInstrumentationRunner
}
Run Code Online (Sandbox Code Playgroud)
但是一旦android.testVariants调用,构建就会被配置,并且所有更改都不会反映在构建中.
如何动态更改testInstrumentationRunner(从gradle插件)?
我更喜欢有2个不同的gradle任务,每个任务使用不同的testInstrumentationRunner但是测试相同的变体.因为我打算创建一个gradle插件,所以解决方案也应该像插件一样工作.
我的应用程序包含一个Activity用户Fragments.
我希望使用Espresso来测试用户界面Fragments.但是我遇到了一个问题.
如何测试一个Fragment未添加到Activity在onCreate.我见过的所有例子都Fragments涉及到Fragment被添加onCreate.那么我怎么能告诉Espresso去特定的Fragment并从那里开始呢?
谢谢
我用asynctask遇到了一些奇怪的警告.我正在学习GCM,所以我尝试使用asynctask.这是警告:
Type safety: The method execute(Object...) belongs to the raw type AsyncTask. References to generic type AsyncTask<Params,Progress,Result> should be parameterized
Run Code Online (Sandbox Code Playgroud)
我想了解这个警告的意思.它是关于线程的.为什么它不安全?这是什么原料?
这是我的代码:
private void registerInBackground() {
// TODO Auto-generated method stub
new AsyncTask() {
@Override
protected Object doInBackground(Object... arg0) {
// TODO Auto-generated method stub
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
}
regid = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regid;
// You should send the registration ID to your …Run Code Online (Sandbox Code Playgroud) 在 Espresso 测试中,我想获得我的参考,ViewPager以便我可以附加一个IdlingResource。但是findViewById返回null,即使我在ViewPager显示之前确认。
// Passes
onView(withId(R.id.viewPager)).check(matches(isDisplayed()));
Activity activity = activityTestRule.getActivity();
assertNotNull(activity);
// Fails
assertNotNull(activity.findViewById(R.id.viewPager));
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我试图获得一个实例WebView,以便我可以调用evaluateJavascript()它.我编写了一个自定义匹配器,然后尝试将其分配WebView给静态变量,如下所示:
public static WebView view1;
public static Matcher<View> isJavascriptEnabled1() {
return new BoundedMatcher<View, WebView>(WebView.class) {
@Override
public void describeTo(Description description) {
description.appendText("WebView with JS enabled");
}
@Override
public boolean matchesSafely(WebView webView) {
view1 =webView;
return webView.getSettings().getJavaScriptEnabled();
}
};
}
Run Code Online (Sandbox Code Playgroud)
在我的测试课中,我打电话给:
CustomMatcher.isJavascriptEnabled1();
CustomMatcher.view1.evaluateJavascript("$('.status dl dd').get(0).innerText.replace('pts.', '').replace(',', '').trim()\"]",new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Prints asd
}
Run Code Online (Sandbox Code Playgroud)
});
我收到错误: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.evaluateJavascript(java.lang.String, android.webkit.ValueCallback)' on a null …