Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
giuseppe-trisciuoglio avatar

Unit Test Utility Methods

  • 1.6k installs
  • 311 repo stars
  • Updated June 22, 2026
  • giuseppe-trisciuoglio/developer-kit

Patterns and code generation for comprehensive unit tests of utility classes, static methods, and pure functions.

About

This skill generates test patterns for utility classes with static helper methods and pure functions, covering null handling, edge cases, and boundary conditions. Developers use it when testing string manipulation, math helpers, validators, and collection utilities without mocking. Key workflows include creating descriptive test names, using AssertJ for readable assertions, applying @ParameterizedTest for multiple inputs, and validating pure functions that have no state or side effects. Examples span string utils, null-safe utilities, math calculations, collection operations, data validation, and rare clock dependencies.

  • AssertJ chainable assertions for readable, expressive test code
  • @ParameterizedTest patterns for testing multiple similar inputs efficiently
  • Edge case and boundary condition coverage: null, empty, whitespace, extreme values
  • Pure function focus with no mocking required for stateless utility testing
  • Floating-point precision handling with isCloseTo(delta) instead of exact equality

Unit Test Utility Methods by the numbers

  • 1,643 all-time installs (skills.sh)
  • +55 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #441 of 2,184 Testing & QA skills by installs in the Skillselion catalog
  • Security screen: HIGH risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

unit-test-utility-methods capabilities & compatibility

Capabilities
generate test class structure · create assertj assertions · apply @parameterizedtest patterns · identify edge cases · validate null/empty handling
Use cases
testing · code review · debugging
Platforms
macOS · Windows · Linux
Runs
Runs locally
Pricing
Free
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill unit-test-utility-methods

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1.6k
repo stars311
Security audit2 / 3 scanners passed
Last updatedJune 22, 2026
Repositorygiuseppe-trisciuoglio/developer-kit

What it does

Write unit tests for utility classes, static methods, and pure functions with AssertJ assertions and parameterized test patterns.

Who is it for?

Testing string utilities, math helpers, validators, collection operations, and data transformations with no side effects.

Skip if: Testing stateful classes, integration logic, classes with external dependencies, or methods with side effects.

When should I use this skill?

Writing tests for utility classes, testing pure functions, verifying null/empty handling, testing static helper methods, validating edge cases.

What you get

Developers write clear, maintainable unit tests using AssertJ and @ParameterizedTest that validate pure function correctness.

  • Test class with descriptive test method names
  • AssertJ assertions
  • @ParameterizedTest for multiple inputs

By the numbers

  • Covers 6 utility categories: string, null-safe, math, collection, validation, and clock-dependent utilities
  • Includes 20+ concrete test examples across different utility types

Files

SKILL.mdMarkdownGitHub ↗

Unit Testing Utility Classes and Static Methods

Overview

This skill generates tests for utility classes with static helper methods and pure functions. It provides patterns for testing null handling, edge cases, boundary conditions, and common utilities like string manipulation, calculations, data validation, and collections. Pure functions require no mocking.

When to Use

Use this skill when:

  • Writing tests for utility/helper classes with static methods
  • Testing pure functions with no state or side effects
  • Testing string manipulation, formatting, or transformation utilities
  • Testing calculation, conversion, or math helper functions
  • Testing data validation and formatter utilities
  • Verifying null/empty input handling in utility code
  • Testing collections or array helper methods

Instructions

1. Create test class: Name it after the utility (e.g., StringUtilsTest) 2. Test happy path: Valid inputs with expected outputs 3. Test edge cases: null, empty, whitespace, single elements 4. Test boundary conditions: max/min values, large numbers, precision 5. Use descriptive names: shouldCapitalizeFirstLetter instead of test1 6. Use AssertJ: For readable, chainable assertions 7. Use `@ParameterizedTest`: For multiple similar inputs (see references/parameterized-tests.md) 8. Avoid mocking: Pure utilities need no mocks

Examples

Basic Static Utility Test

import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;

class StringUtilsTest {

    @Test
    void shouldCapitalizeFirstLetter() {
        assertThat(StringUtils.capitalize("hello")).isEqualTo("Hello");
    }

    @Test
    void shouldReturnNullForNullInput() {
        assertThat(StringUtils.capitalize(null)).isNull();
    }

    @Test
    void shouldHandleEmptyString() {
        assertThat(StringUtils.capitalize("")).isEmpty();
    }

    @Test
    void shouldHandleSingleCharacter() {
        assertThat(StringUtils.capitalize("a")).isEqualTo("A");
    }
}

Comprehensive Example: isEmpty Implementation

// Input: public static boolean isEmpty(String str)
//   { return str == null || str.trim().isEmpty(); }

class StringUtilsTest {

    @Test
    void shouldReturnTrueForNullString() {
        assertThat(StringUtils.isEmpty(null)).isTrue();
    }

    @Test
    void shouldReturnTrueForEmptyString() {
        assertThat(StringUtils.isEmpty("")).isTrue();
    }

    @Test
    void shouldReturnTrueForWhitespaceOnly() {
        assertThat(StringUtils.isEmpty("   ")).isTrue();
    }

    @Test
    void shouldReturnFalseForNonEmptyString() {
        assertThat(StringUtils.isEmpty("hello")).isFalse();
    }
}

Null-Safe Utility

class NullSafeUtilsTest {

    @Test
    void shouldReturnDefaultWhenNull() {
        assertThat(NullSafeUtils.getOrDefault(null, "default")).isEqualTo("default");
    }

    @Test
    void shouldReturnValueWhenNotNull() {
        assertThat(NullSafeUtils.getOrDefault("value", "default")).isEqualTo("value");
    }

    @Test
    void shouldReturnFalseWhenBlank() {
        assertThat(NullSafeUtils.isNotBlank(null)).isFalse();
        assertThat(NullSafeUtils.isNotBlank("   ")).isFalse();
    }
}

Math/Calculation Utility

class MathUtilsTest {

    @Test
    void shouldCalculatePercentage() {
        assertThat(MathUtils.percentage(25, 100)).isEqualTo(25.0);
    }

    @Test
    void shouldHandleZeroDivisor() {
        assertThat(MathUtils.percentage(50, 0)).isZero();
    }

    @Test
    void shouldRoundToDecimalPlaces() {
        assertThat(MathUtils.round(3.14159, 2)).isEqualTo(3.14);
    }

    @Test
    void shouldHandleFloatingPointWithTolerance() {
        assertThat(MathUtils.multiply(0.1, 0.2))
            .isCloseTo(0.02, within(0.0001));
    }
}

Collection Utility

class CollectionUtilsTest {

    @Test
    void shouldFilterList() {
        List<Integer> result = CollectionUtils.filter(List.of(1, 2, 3, 4), n -> n % 2 == 0);
        assertThat(result).containsExactly(2, 4);
    }

    @Test
    void shouldHandleNullList() {
        assertThat(CollectionUtils.filter(null, n -> true)).isEmpty();
    }

    @Test
    void shouldJoinWithSeparator() {
        assertThat(CollectionUtils.join(List.of("a", "b", "c"), "-")).isEqualTo("a-b-c");
    }

    @Test
    void shouldDeduplicateList() {
        assertThat(CollectionUtils.deduplicate(List.of("a", "b", "a")))
            .containsExactlyInAnyOrder("a", "b");
    }
}

Data Validation Utility

class ValidatorUtilsTest {

    @Test
    void shouldValidateEmailFormat() {
        assertThat(ValidatorUtils.isValidEmail("user@example.com")).isTrue();
        assertThat(ValidatorUtils.isValidEmail("invalid")).isFalse();
    }

    @Test
    void shouldValidateUrlFormat() {
        assertThat(ValidatorUtils.isValidUrl("https://example.com")).isTrue();
        assertThat(ValidatorUtils.isValidUrl("not a url")).isFalse();
    }

    @Test
    void shouldValidateCreditCard() {
        assertThat(ValidatorUtils.isValidCreditCard("4532015112830366")).isTrue();
        assertThat(ValidatorUtils.isValidCreditCard("1234567890123456")).isFalse();
    }
}

Utility with Clock Dependency (Rare)

@ExtendWith(MockitoExtension.class)
class DateUtilsTest {

    @Mock
    private Clock clock;

    @Test
    void shouldGetDateFromClock() {
        when(clock.instant()).thenReturn(Instant.parse("2024-01-15T10:00:00Z"));
        assertThat(DateUtils.today(clock)).isEqualTo(LocalDate.of(2024, 1, 15));
    }
}

Best Practices

  • Test pure functions exclusively - no side effects or state dependency
  • Cover happy path and edge cases - null, empty, whitespace, extreme values
  • Use descriptive test names - shouldReturnNullWhenInputIsNull
  • Use `@ParameterizedTest` for multiple similar inputs (see references/parameterized-tests.md)
  • Test boundary conditions - min/max values, overflow, precision
  • Avoid mocking pure functions - only mock external dependencies like Clock
  • Keep tests independent - no order dependency between tests

Constraints and Warnings

  • No mocking static methods: Use reflection utilities only when absolutely necessary
  • Pure function requirement: Stateful utilities are harder to test; prefer immutability
  • Floating point precision: Never use exact equality; use isCloseTo(delta)
  • Null handling consistency: Decide whether utility returns null or throws; test accordingly
  • Thread safety: Static utilities must be thread-safe; verify concurrent behavior separately
  • Immutable inputs: Document whether utilities modify input parameters
  • Edge cases reference: See references/edge-cases.md for boundary testing patterns

Related skills

Forks & variants (1)

Unit Test Utility Methods has 1 known copy in the catalog totaling 20 installs. They canonicalize to this original listing.

How it compares

Use this skill for focused utility edge cases; use broader TDD skills when scaffolding entire service test suites.

FAQ

Should I mock pure utility functions?

No. Pure functions require no mocking. Mock only external dependencies like Clock. Mocking pure utilities adds unnecessary complexity.

How do I test floating-point precision?

Use isCloseTo(value, within(delta)) instead of isEqualTo(). Exact equality fails due to floating-point representation.

What edge cases must I cover?

Null inputs, empty strings, whitespace, single elements, max/min values, boundary conditions, and overflow scenarios.

Is Unit Test Utility Methods safe to install?

skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Testing & QAtestingbackend

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.