Back to Repositories

Testing UI Message Handling System in AndroidUtilCode

This test suite validates the UiMessageUtils functionality in AndroidUtilCode, focusing on message handling and listener management. It verifies both single and multiple message scenarios within the UI messaging system.

Test Coverage Overview

The test suite provides comprehensive coverage of the UiMessageUtils class, focusing on two main scenarios:

  • Single message handling with listener registration and deregistration
  • Multiple message handling with different message IDs and content
  • Message delivery verification before and after listener removal

Implementation Analysis

The testing approach utilizes JUnit framework to validate message handling mechanisms. It implements callback patterns through UiMessageCallback interface, demonstrating both simple and complex message routing scenarios. The tests verify proper message delivery and listener lifecycle management.

Key patterns include singleton instance management, callback implementation, and message routing via switch statements.

Technical Details

Testing Infrastructure:

  • JUnit test framework for unit testing
  • Custom UiMessageUtils singleton implementation
  • Anonymous inner classes for callback implementations
  • System.out for verification output
  • NonNull annotations for null-safety

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Proper test isolation with separate test methods
  • Comprehensive listener lifecycle testing
  • Clear test method naming conventions
  • Verification of both positive and cleanup scenarios
  • Structured message handling with proper type safety

blankj/androidutilcode

lib/utilcode/src/test/java/com/blankj/utilcode/util/UiMessageUtilsTest.java

            
package com.blankj.utilcode.util;


import org.junit.Test;

import androidx.annotation.NonNull;

/**
 * <pre>
 *     author: blankj
 *     blog  : http://blankj.com
 *     time  : 2019/10/21
 *     desc  : test UiMessageUtils
 * </pre>
 */
public class UiMessageUtilsTest extends BaseTest {

    @Test
    public void singleMessageTest() {
        UiMessageUtils.UiMessageCallback listener = new UiMessageUtils.UiMessageCallback() {
            @Override
            public void handleMessage(@NonNull UiMessageUtils.UiMessage localMessage) {
                System.out.println("receive -> " + localMessage.getId() + ": " + localMessage.getObject());
            }
        };
        UiMessageUtils.getInstance().addListener(listener);

        UiMessageUtils.getInstance().send(1, "msg");

        UiMessageUtils.getInstance().removeListener(listener);

        UiMessageUtils.getInstance().send(1, "msg");
    }

    @Test
    public void multiMessageTest() {
        UiMessageUtils.UiMessageCallback listener = new UiMessageUtils.UiMessageCallback() {
            @Override
            public void handleMessage(@NonNull UiMessageUtils.UiMessage localMessage) {
                switch (localMessage.getId()) {
                    case 1:
                        System.out.println("receive -> 1: " + localMessage.getObject());
                        break;
                    case 2:
                        System.out.println("receive -> 2: " + localMessage.getObject());
                        break;
                    case 4:
                        System.out.println("receive -> 4: " + localMessage.getObject());
                        break;
                }
            }
        };
        UiMessageUtils.getInstance().addListener(listener);

        UiMessageUtils.getInstance().send(1, "msg1");
        UiMessageUtils.getInstance().send(2, "msg2");
        UiMessageUtils.getInstance().send(4, "msg4");

        UiMessageUtils.getInstance().removeListener(listener);

        UiMessageUtils.getInstance().send(1, "msg1");
        UiMessageUtils.getInstance().send(2, "msg2");
        UiMessageUtils.getInstance().send(4, "msg4");
    }
}