Android测试类中@Test方法未按定义顺序执行的解决方法
解决JUnit测试方法不按定义顺序执行的问题
原因
JUnit 4默认会随机化测试方法的执行顺序,目的是推动开发者编写无依赖的独立测试,但你的测试场景需要按特定流程执行(登录→检查工作计划状态→重试获取工作计划),所以默认行为不符合需求。
解决方案
使用JUnit 4的@FixMethodOrder注解指定执行顺序:
- 导入必要的类:
import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters;
- 在测试类
MainScreenTest上添加@FixMethodOrder(MethodSorters.JVM)注解:
@LargeTest @RunWith(AndroidJUnit4ClassRunner.class) @FixMethodOrder(MethodSorters.JVM) // 添加这行 public class MainScreenTest { // ... 原有类内容保持不变 }
MethodSorters.JVM会按照方法在字节码中的顺序执行,也就是你在代码里定义的顺序。如果担心不同JVM版本可能带来的顺序差异,也可以修改测试方法名,让它们的字母顺序和期望执行顺序一致,再使用MethodSorters.NAME_ASCENDING,比如改成:
test01_loginIsSuccessfull()test02_isWorkPlanReady()test03_getWorkPlanWhenNotReady()
额外提示
你的测试存在明显依赖关系:只有登录成功后,后续的工作计划相关测试才有意义。当前写法如果顺序不对,后续测试会直接失败。更合理的优化方向:
- 将登录操作放到
@Before方法中,确保每个测试执行前都完成登录并进入MainActivity; - 或者将这三个步骤整合到同一个测试方法中,作为一个完整的业务流程测试。
内容的提问来源于stack exchange,提问作者saber javadi
相关产品推荐
相关产品推荐

