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 activityRule =
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()));
}

}

posted @ 2025-05-27 21:51  李蕊lr  阅读(9)  评论(0)    收藏  举报