以下是我的Espresso测试用例之一.
public void testLoginAttempt() {
Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("nonexistinguser@krossover.com"));
Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("invalidpassword"));
Espresso.onView(ViewMatchers.withId(R.id.login_button)).perform(ViewActions.click());
// AFTER CLICKING THE BUTTON, A NEW ACTIVITY WILL POP UP.
// Clicking launches a new activity that shows the text entered above. You don't need to do
// anything special to handle the activity transitions. Espresso takes care of waiting for the
// new activity to be resumed and its view hierarchy to be laid out.
Espresso.onView(ViewMatchers.withId(R.id.action_logout))
.check(ViewAssertions.matches(not(ViewMatchers.isDisplayed())));
}
Run Code Online (Sandbox Code Playgroud)
目前我所做的是检查新活动(R.id.action_logout)中的视图是否可见.如果可见,我将假设活动成功打开.但它似乎没有像我预期的那样工作.有没有更好的方法来检查是否成功启动了新活动而不是检查该活动中的视图是否可见?谢谢
我正在使用Espresso进行活动转换测试,但我不知道这是否是最好的方法:
public void testStartLogin() {
onView(withId(R.id.register)).perform(click());
onView(withId(R.id.login_password)).check(matches(isDisplayed()));
onView(withId(R.id.login_show_password)).check(matches(isDisplayed()));
}
Run Code Online (Sandbox Code Playgroud)
最后两个来自第二个活动,但这对我来说太可怕了.有什么不同的方式吗?
我已经玩Espresso了几周的测试,最后我决定开始测试碎片.
我立即遇到了问题,如何获得当前的活动?
我的应用程序使用登录数据,因此我无法使用测试规则启动活动.简而言之,是否有类似于getActivity()做浓缩咖啡测试的东西?
我想为重新创建活动编写测试.执行旋转是可选的.
我希望测试能够被谷歌"祝福"的测试框架的最新版本编写.我是编写测试的新手,所以我想学习基本的,主流的,支持良好的工具.当我掌握基础知识时,任何第三方测试框架都会没问题.而且由于我想测试非常基本的,经常出现的场景,基本工具应该足够了,对吧?
最小测试代码:
public class MainActivity extends AppCompatActivity {
static int creationCounter = 0;
Integer instanceId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
++creationCounter;
instanceId = new Integer(creationCounter);
Log.d("TEST", "creating activity " + this + ", has id " + instanceId);
}
}
Run Code Online (Sandbox Code Playgroud)
和测试类:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void useAppContext() throws Exception {
MainActivity activity1 = mActivityTestRule.getActivity();
int act1 = activity1.instanceId.intValue();
int counter1 = MainActivity.creationCounter;
assertEquals(1, counter1);
assertEquals(1, act1);
Log.d("TEST", …Run Code Online (Sandbox Code Playgroud) 是否可以使用Butterknife注入测试类的视图?视图被注入到由MainActivity类创建和提交的片段中.
这是我的测试类的代码:
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity mMainActivity;
private Button learnButton;
private Button teachButton;
@SuppressWarnings( "deprecation" )
public MainActivityTest() {
super("com.example.application.app", MainActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
mMainActivity = getActivity();
learnButton = (Button) mMainActivity.findViewById(R.id.buttonLearn);
teachButton = (Button) mMainActivity.findViewById(R.id.buttonTeach);
}
Run Code Online (Sandbox Code Playgroud)
但是我使用Butterknife在我的片段中注入视图:
public class ChooseActionFragment extends Fragment {
@InjectView(R.id.buttonTeach) Button buttonTeach;
@InjectView(R.id.buttonLearn) Button buttonLearn;
public ChooseActionFragment() { }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
ButterKnife.inject(this, rootView); …Run Code Online (Sandbox Code Playgroud)