8000 GitHub - zrq1060/TestPoint
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

zrq1060/TestPoint

Repository files navigation

TestPoint

一个用于帮助 Android App 进行测试、修改配置、模块化的框架

最新版本

Maven Central

Demo展示

demo

一、功能介绍

  • 使用注解添加标注,方便简单
  • 支持Activity、Fragment、方法
  • 支持测试多个模块、指定测试模块
  • 未使用apk dex解析,性能提升
  • 可实现release环境微侵入、零侵入

二、基础功能

1.添加依赖和配置

  • ksp(推荐)

    // 可以参考 module-kotlin 模块中的写法
    plugins {
        alias(libs.plugins.ksp)
    }
    
    ksp {
        arg("TEST_MODULE_NAME", project.getName())
    }
    
    dependencies {
        implementation 'io.github.zrq1060:test-point-annotation:0.0.1'
        debugImplementation 'io.github.zrq1060:test-point-api:0.0.1'
        kspDebug 'io.github.zrq1060:test-point-ksp:0.0.1'
    }

    并在gradle.properties内添加如下

    # 禁用增量
    ksp.incremental=false
    
  • kapt

    // 可以参考 module-kotlin 模块中的写法
    plugins {
        id 'kotlin-kapt'
    }
    
    kapt {
        arguments {
            arg("TEST_MODULE_NAME", project.getName())
        }
    }
    
    dependencies {
        implementation 'io.github.zrq1060:test-point-annotation:0.0.1'
        debugImplementation 'io.github.zrq1060:test-point-api:0.0.1'
        kaptDebug 'io.github.zrq1060:test-point-compiler:0.0.1'
    }

2.标记要测试的模块

在任意类上添加TestEntryPointModules注解,标明要测试的module名(没传值,默认为当前模块)。例如在App上添加

@TestEntryPointModules({"app", "module-java", "module-kotlin"})
public class App extends Application {

}

3.标记要测试的Activity、Fragment

ActivityFragment类上添加TestEntryPoint注解,标明要测试的点。

@TestEntryPoint("登录")
public class LoginActivity extends AppCompatActivity {
    ...
}
@TestEntryPoint("我的")
public class MineFragment extends Fragment {
    ...
}

4.运行项目

运行项目,运行成功后,在启动桌面多了一个名为Test的启动图标,打开即可看到测试列表页面,点击对应的按钮即可跳到刚标注的ActivityFragment

三、进阶用法

1.指定静态无参方法

如果你想测试和Android无关的(如,测试字符串拼接是否正确等),可以用此方法。

public class Test {

    @TestEntryPoint("App-静态方法")
    public static void test1() {
        ...
    }
}

2.指定非静态无参方法

如果你想测试和Android相关的(如,SharedPreferences获取的值是否正确等),可以用此方法。

2.1.创建类

src/debug/java/包名下,创建一个类,并继承TestListFragment ,如

demo

2.2.给类添加TestEntryPointListFragment注解

@TestEntryPointListFragment
public class MyTestListFragment extends TestListFragment {
    ...
}

2.3.给方法添加TestEntryPoint注解

@TestEntryPointListFragment
public class MyTestListFragment extends TestListFragment {

    @TestEntryPoint("App-非静态方法")
    public void test1() {
        ...
    }
}

3.手动自定义添加

如果你想实现零侵入跳转、跳转时传参自定义点击按钮逻辑,可以用此方法。

在步骤2.2基础上,复写onAddTestItems()方法,在其内部调用addItem方法进行增加。

@TestEntryPointListFragment
class MyTestListFragment1 : TestListFragment() {

    override fun onAddTestItems() {
        addItem("Activity1-无参", Activity1::class.java)
        addItem("Fragment1-无参", Fragment1::class.java)

        addItem("Activity1-有参", Activity1::class.java, "name" to "张三", "age" to 20)
        addItem("Fragment1-有参", Fragment1::class.java, "name" to "张三", "age" to 20)

        addItem("自定义") {
            // 点击此按钮,执行此方法。
        }
    }
}

说明:

  • 如果不想在目标类使用TestEntryPoint注解,则使用此方式添加跳转逻辑,并修改上面引入test-point-annotation的依赖方式为debugImplementation,此为零侵入
  • 如果可以接受在目标类使用TestEntryPoint注解,则是上面默认的引入方式,上面引入test-point-annotation依赖则继续使用implementation,此为微侵入

4.其它

4.1.指定Fragment详情页

如果你要跳转的Fragment有添加@AndroidEntryPoint注解,则承载其的Activity也需要添加@AndroidEntryPoint注解,则可以使用此方式指定使用自定义的TestFragmentDetailsActivity

@AndroidEntryPoint
@TestEntryPointFragmentDetailsActivity
public class MyTestFragmentDetailsActivity extends TestFragmentDetailsActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

4.2.定制Test应用的名字

如果你有多模块并都使用了此库,则可以定制每个Test应用的名称,需覆盖test_list_label的默认字符串即可。

在app下strings.xml内添加

<resources>
    <string name="test_list_label">Test App Name</string>
</resources>

或在app下build.gradle内添加,可参考demo的app下的build.gradle配置。

resValue "string", "test_list_label", "Test App Name"

四、注解说明

注解 功能说明 使用约束 数量支持
TestEntryPoint 标记测试进入点 ActivityFragment静态无参方法TestListFragment子类非静态无参方法 无数个
TestEntryPointModules 标记要测试的模块名称 可放到任意类上 App内唯一
TestEntryPointListFragment 标记自定义的TestListFragment 继承TestListFragment的类 无数个
TestEntryPointFragmentDetailsActivity 标记自定义的TestFragmentDetailsActivity 继承TestFragmentDetailsActivity的类 App内唯一

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0