Back to Repositories

Testing Hystrix Command Implementation with AspectJ Weaving in Netflix/Hystrix

This test suite validates the AspectJ-based command functionality in Netflix’s Hystrix library, focusing on user service implementations and generic service patterns. The test class extends BasicCommandTest to verify command behavior with different service types and weaving modes.

Test Coverage Overview

The test suite provides comprehensive coverage of Hystrix command implementations across different service types.

  • Tests user service command execution patterns
  • Validates advanced user service functionality
  • Verifies generic service implementations with parameterized types
  • Covers compile-time AspectJ weaving configuration

Implementation Analysis

The testing approach utilizes inheritance from BasicCommandTest while implementing specific service creation methods. The implementation leverages AspectJ compile-time weaving for command interception, configured through system properties.

  • Service factory method pattern implementation
  • Compile-time weaving configuration
  • Generic type parameter handling

Technical Details

  • JUnit test framework integration
  • AspectJ compile-time weaving
  • System property configuration for weaving mode
  • Generic type parameters (String, Long, User)
  • Service inheritance patterns

Best Practices Demonstrated

The test class exemplifies clean code organization and effective testing patterns for aspect-oriented programming.

  • Clear separation of concerns in service creation
  • Proper test inheritance structure
  • Environment setup in @BeforeClass
  • Type-safe generic service handling

netflix/hystrix

hystrix-contrib/hystrix-javanica/src/ajcTest/java/com/netflix/hystrix/contrib/javanica/test/aspectj/command/CommandTest.java

            
/**
 * Copyright 2016 Netflix, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.netflix.hystrix.contrib.javanica.test.aspectj.command;

import com.netflix.hystrix.contrib.javanica.test.common.command.BasicCommandTest;
import com.netflix.hystrix.contrib.javanica.test.common.domain.User;
import org.junit.BeforeClass;


public class CommandTest extends BasicCommandTest {

    @BeforeClass
    public static void setUpEnv(){
        System.setProperty("weavingMode", "compile");
    }

    @Override
    protected UserService createUserService() {
        return new UserService();
    }

    @Override
    protected AdvancedUserService createAdvancedUserServiceService() {
        return new AdvancedUserService();
    }

    @Override
    protected GenericService<String, Long, User> createGenericUserService() {
        return new GenericUserService();
    }
}