5.27
一、JUnit 与 Mockito 单元测试
测试 Android ViewModel 层业务逻辑:
java
@RunWith(MockitoJUnitRunner.class)
public class UserViewModelTest {
@Mock
private UserRepository mockRepository;
@Mock
private LiveData<User> mockUserLiveData;
private UserViewModel viewModel;
@Before
public void setup() {
viewModel = new UserViewModel(mockRepository);
}
@Test
public void testGetUser() {
// 模拟仓库返回数据
when(mockRepository.getUser("123")).thenReturn(mockUserLiveData);
// 调用测试方法
LiveData<User> result = viewModel.getUser("123");
// 验证结果
assertNotNull(result);
verify(mockRepository).getUser("123");
}
@Test
public void testUpdateUser() {
User user = new User("123", "John Doe");
// 调用测试方法
viewModel.updateUser(user);
// 验证仓库方法被调用
verify(mockRepository).updateUser(user);
}
}
二、Espresso UI 自动化测试
测试登录页面交互流程:
java
@RunWith(AndroidJUnit4.class)
public class LoginActivityTest {
@Rule
public ActivityScenarioRule
new ActivityScenarioRule<>(LoginActivity.class);
@Test
public void testLoginSuccess() {
// 输入用户名和密码
onView(withId(R.id.et_username)).perform(typeText("testuser"));
onView(withId(R.id.et_password)).perform(typeText("testpass"), closeSoftKeyboard());
// 点击登录按钮
onView(withId(R.id.btn_login)).perform(click());
// 验证跳转至主页面
onView(withId(R.id.main_container)).check(matches(isDisplayed()));
}
@Test
public void testLoginFailure() {
// 输入错误密码
onView(withId(R.id.et_username)).perform(typeText("testuser"));
onView(withId(R.id.et_password)).perform(typeText("wrongpass"), closeSoftKeyboard());
// 点击登录按钮
onView(withId(R.id.btn_login)).perform(click());
// 验证错误提示
onView(withText(R.string.login_failure)).check(matches(isDisplayed()));
}
}

浙公网安备 33010602011771号