我想进行一个简单的UI测试,测试一个按钮被按下并启动一个活动。
我已经尝试了基于这个文档(安卓开发者)。
SplashActivity的代码:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
findViewById(R.id.launch_register_activity_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SplashActivity.this, RegisterActivity.class);
startActivity(intent);
}
});
}
}
测试代码:
@RunWith(AndroidJUnit4.class)
public class SimpleIntentTest {
@Rule
public IntentsTestRule<SplashActivity> intentsRule = new IntentsTestRule<>(SplashActivity.class);
@Test
public void newActivityLaunchingTest() {
onView(withId(R.id.launch_register_activity_btn)).perform(click());
Log.i("register-package_name", RegisterActivity.class.getPackage().toString());
Log.i("register-class_name", RegisterActivity.class.getName());
Log.i("register-short_name", RegisterActivity.class.getSimpleName());
intended(allOf(
hasComponent(hasShortClassName(".RegisterActivity")),
toPackage("re.example.common")
));
}
}
日志记录:
01-22 13:37:51.615: I/register-package_name(25292): package re.example.common, Unknown, version 0.0
01-22 13:37:51.615: I/register-class_name(25292): re.example.common.RegisterActivity
01-22 13:37:51.615: I/register-short_name(25292): RegisterActivity
包结构:
测试输出:
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents.
IntentMatcher: (has component: has component with: class name: an instance of java.lang.String package name: an instance of java.lang.String short class name: is ".RegisterActivity" and resolvesTo: re.example.common)
Matched intents:[]
无论我怎么尝试,测试都无法验证我是否已经启动了RegisterActivity。测试失败了。
据我所知,我做的和上面链接中的espresso测试示例完全一样。
我做错了什么?
我还尝试过:
1. 从".RegisterActivity"中删除点号(.)。
intended(allOf(
hasComponent(hasShortClassName("RegisterActivity")),
toPackage("re.example.common")
));
2. 移除 ".RegisterActivity" 中的点号 (.) 并更改为 toPackage("re.example.common")
intended(allOf(
hasComponent(hasShortClassName("RegisterActivity"))
));
我的RegisterActivity的包名是"re.example.common.RegisterActivity"。 它的简称是"RegisterActivity",对吧?
为什么测试失败了?
这里发生了什么,我理解错了还是误解了什么?
提前感谢。
Matched intents:[]
的出现表明 Espresso 没有记录任何意图。你是否尝试过稍微延迟一下,以排除 UI 线程同步的影响,只是为了测试这个理论?还有一个愚蠢的问题 - 如果手动测试,按钮实际上是否有效?最后一个问题是,你在哪个操作系统上运行测试? - Be_Negative