android单元测试

依赖

    dependencies {
    // Required -- JUnit 4 framework
    testImplementation 'junit:junit:4.12'
    // Optional -- Mockito framework(可选,用于模拟一些依赖对象,以达到隔离依赖的效果)
    testImplementation 'org.mockito:mockito-core:2.19.0'
}

单元测试用例路径:
app/src
├── androidTestjava (仪器化单元测试、UI测试)
├── main/java (业务代码)
└── test/java (本地单元测试)
创建单元测试用例

可以在相应目录下手动创建测试类,或者使用 AS 快捷方式:
打开相应类 -> 空白处右键 -> 选择 Generate -> 选择 Test

PS: 勾选 setUp/@Before,并在下方勾选需要生成的方法名
运行单元测试用例

  • 运行单个测试方法:选中方法右键 Run 或者点击方法名前的 Run 图标
  • 运行一个测试类中的所有测试方法:打开类文件,在类的范围内右键选择Run,或者直接选择类文件直接右键Run;
  • 运行一个目录下的所有测试类:选择这个目录,右键Run
    @RunWith

需要指定@RunWith(MockitoJUnitRunner.class),否则 Mock 无效
@Before

setUp 中需要做的几件事:

  1. 创建个你需要做单元测试的对象
  2. mock 上一步对象构造函数所需要的形参 (使用 Mockito.mock(Class clazz)方法或者用 @Mock 注解)
  3. mock 需要做单元测试的对象中 @inject 的对象或者 new 的对象(成员变量,并且是测试方法用到的),设置进步骤 1 创建的对象中
    @Test

针对有返回值的方法的测试步骤:

  • 基本类型: 1).先使用 when(测试对象的测试方法的内部函数).thenReturn(xxx);
    2).再直接调用测试对象的方法;
    3).最后使用 assertThat(测试对象的测试方法的内部函数, is(xxx)) 来验证实际执行的结果正确性,或者使用 verify(测试对象的测试方法的内部函数)来验证内部函数走的逻辑是否正确
  • 引用类型:1).先使用 when(测试对象的测试方法的内部函数).thenReturn(xxx) (看是否需要);
    2).再直接调用测试对象的方法;
    3).最后使用 assertThat(测试对象的测试方法的内部函数, is(notNullValue)) 来验证实际执行的结果正确性,或者使用 verify(测试对象的测试方法的内部函数)来验证内部函数走的逻辑是否正确

针对无返回值得方法的测试步骤:
1).直接调用测试对象的测试方法;
2).最后使用 verify(测试对象的测试方法的内部函数)来验证内部函数走的逻辑是否正确

@RunWith(MockitoJUnitRunner.class)
public class SceneEngineDataRepositoryTest extends TestCase {

	    private SceneEngineDataRepository sceneEngineDataRepository;
	    private static final String FAKE_STRING_VALUE = "1001";
	    private static final int FAKE_INT_VALUE = 1;
	    private RequestBody requestBody = null;
	    private Map<String, Object> map = new HashMap<>();
	    
	    @Mock
	    SceneEngineDataStoreFactory factory;
	    @Mock
	    SceneEngineDataStoreImpl dataStore;
	
	
	    @Before
	    public void setUp() throws Exception {
	        sceneEngineDataRepository = new SceneEngineDataRepository(factory);
	        sceneEngineDataRepository.sceneEngineDataStore = dataStore;
	    }
	
	    @Test
	    public void testCreateScene() {
	        sceneEngineDataRepository.createScene(FAKE_STRING_VALUE, requestBody);
	        verify(dataStore).createScene(FAKE_STRING_VALUE, requestBody);
	    }
	
	    @Test
	    public void testQueryScene() {
	        sceneEngineDataRepository.queryScene(FAKE_STRING_VALUE);
	        verify(dataStore).queryScene(FAKE_STRING_VALUE);
	    }
	
	    @Test
	    public void testStartScene() {
	        sceneEngineDataRepository.startScene(FAKE_STRING_VALUE, map);
	        verify(dataStore).startScene(FAKE_STRING_VALUE, map);
	    }
	
	    @Test
	    public void testDeleteScene() {
	        sceneEngineDataRepository.deleteScene(FAKE_STRING_VALUE, FAKE_INT_VALUE);
	        verify(dataStore).deleteScene(FAKE_STRING_VALUE, FAKE_INT_VALUE);
	    }
	
	    @Test
	    public void testEditScene() {
	        sceneEngineDataRepository.editScene(FAKE_STRING_VALUE, requestBody);
	        verify(dataStore).editScene(FAKE_STRING_VALUE, requestBody);
	    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值