Android 单元测试断言校验方法 org.junit.Assert

判断布尔值

assertTrue

assertFalse

判断对象非空

assertNull(object);

案例:

java 复制代码
PersistableBundle result = Util.getCarrierConfig(mockContext, subId);

assertNull(result);

判断是否相等

assertEquals("mocked_string", result.toString());

java 复制代码
package org.junit;

public class Assert {
    /**
     * Asserts that two objects are equal. If they are not, an
     * {@link AssertionError} without a message is thrown. If
     * <code>expected</code> and <code>actual</code> are <code>null</code>,
     * they are considered equal.
     *
     * @param expected expected value
     * @param actual the value to check against <code>expected</code>
     */
    public static void assertEquals(Object expected, Object actual) {
        assertEquals(null, expected, actual);
    }
}

可以用于字符串比较,比如下面的查询条件拼接

java 复制代码
//测试类
public class ApnSettingsTest {

    @Test
    public void testGetFillListQuery_initialWhereEmpty() {
        StringBuilder where = new StringBuilder();
        int subId = 1;

        // Mock the behavior of getSelection method
        when(mFragment.getSelection("", subId)).thenReturn("mocked_selection");

        StringBuilder result = mFragment.getFillListQuery(where, subId);

        // Verify the `where` has the expected selection
        assertEquals("mocked_selection", result.toString());

        // Check log output (Could use a library or a custom handler to intercept logs)
        // For simplicity, assuming log validation is part of the manual test validation process.
    }

    //TODO: 存在问题的测试接口,为什么其他两个getSelection可以返回预期??
    @Test
    public void testGetFillListQuery_initialWhereNonEmpty() {
        StringBuilder where = new StringBuilder("existing_condition");
        int subId = 1;

        // Mock the behavior of getSelection method,没生效?
        when(mFragment.getSelection("existing_condition", subId)).thenReturn(" AND mocked_selection");

        StringBuilder result = mFragment.getFillListQuery(where, subId);

        // Verify the `where` has the expected selection
        // 校验存在问题
        assertEquals("existing_condition AND mocked_selection", result.toString());

        // Check log output similarly as mentioned in previous test
    }

    @Test
    public void testGetFillListQuery_differentSubId() {
        StringBuilder where = new StringBuilder();
        int subId = 2;

        // Mock the behavior of getSelection method
        when(mFragment.getSelection("", subId)).thenReturn("different_selection");

        StringBuilder result = mFragment.getFillListQuery(where, subId);

        // Verify the `where` has the expected selection
        assertEquals("different_selection", result.toString());

        // Check log output similarly as mentioned in previous tests
    }

}


//被测试类
public class DemoSettings {

    @VisibleForTesting
    StringBuilder getFillListQuery(StringBuilder where, int subId) {
        String selection = "";
        selection = getSelection(selection, subId);
        where.append(selection);    // 拼接新增的过滤条件
        return where;
    }

    /**
     * Customize the cursor select conditions with subId releated to SIM.
     */
    String getSelection(String selection, int subId) {

        boolean isCustomized = true;
        Context context = getContext();
        if (context != null) {
            isCustomized = SubscriptionManager.getResourcesForSubId(getContext().getApplicationContext(), subId)
                    .getBoolean(R.bool.config_is_customize_selection);
        }

        if(!isCustomized) return selection;

        // 注意有两个双引号的地方:第一个转义",第二个是字符串匹配
        // 拼接的查询语句等效于:
        // (type = 0 or sub_id = $传入值)
        // SQL 查询语句:
        // SELECT *
        // FROM your_table
        // WHERE status = 'active' AND (type = "0" OR sub_id = "subId");
        String where = "(" + " type =\"" + "0" + "\"";
        where += " or sub_id =\"" + subId + "\"";
        where += " or type =\"" + "2" + "\"" + ")";
        selection = selection + " and " + where;
        return where;
    }

    // Additional tests could be written to consider edge cases, such as:
    // - Negative subId values
    // - Null or invalid StringBuilder where value
    // In real scenario, depending on codebase other relevant checks can also be added.

}

上述代码校验存在问题,报错如下:

Expected :existing_condition AND mocked_selection

Actual :existing_condition and (type ="0" or sub_id ="1" or type ="2")

<Click to see difference>

org.junit.ComparisonFailure: expected:<existing_condition [AND mocked_selection]> but was:<existing_condition [and (type ="0" or sub_id ="1" or type ="2")]>

修改后pass的逻辑,因为内部会自己创建where值,不知道为什么不按 when.thenReturn 的返回 mocked_selection。

java 复制代码
    @Test
    public void testGetFillListQuery_initialWhereNonEmpty() {
        StringBuilder where = new StringBuilder("existing_condition");
        int subId = 1;

        // Mock the behavior of getSelection method
        when(mFragment.getSelection("", subId))
                .thenReturn(" and (type ='0' or sub_id ='1' or type ='2')");

        StringBuilder result = mFragment.getFillListQuery(where, subId);

        // Verify the `where` has the expected selection
        assertEquals("existing_condition and (type ='0' or sub_id ='1' or type  ='2')",
                result.toString());
    }
相关推荐
6***B4810 小时前
存储过程(SQL)
android·数据库·sql
t***316510 小时前
Docker 之mysql从头开始——Docker下mysql安装、启动、配置、进入容器执行(查询)sql
sql·mysql·docker
合作小小程序员小小店12 小时前
桌面开发,超市管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·sqlserver·c#
N***738514 小时前
SQL锁机制
java·数据库·sql
cookqq14 小时前
mongodb根据索引IXSCAN 查询记录流程
数据结构·数据库·sql·mongodb·nosql
6***v41715 小时前
spring boot 项目打印sql日志和结果,使用logback或配置文件
spring boot·sql·logback
2***s67220 小时前
给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
数据库·sql·oracle
AI2中文网21 小时前
AppInventor2 使用 SQLite(三)带条件过滤查询表数据
数据库·sql·sqlite·select·app inventor 2·appinventor·tableview
I***26151 天前
智能生成ER图工具。使用 SQL 生成 ER 图:让数据库设计更高效
数据库·sql·oracle
jnrjian1 天前
Oracle hints 空格要求
sql·oracle