All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.uber.cadence.testing.TestActivityEnvironment Maven / Gradle / Ivy

There is a newer version: 3.12.5
Show newest version
/*
 *  Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 *  Modifications copyright (C) 2017 Uber Technologies, Inc.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License"). You may not
 *  use this file except in compliance with the License. A copy of the License is
 *  located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 *  or in the "license" file accompanying this file. This file 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.uber.cadence.testing;

import com.google.common.annotations.VisibleForTesting;
import com.uber.cadence.internal.sync.TestActivityEnvironmentInternal;
import com.uber.cadence.serviceclient.IWorkflowService;
import java.lang.reflect.Type;
import java.util.function.Consumer;

/**
 * The helper class for unit testing activity implementations. Supports calls to {@link
 * com.uber.cadence.activity.Activity} methods from the tested activities. An example test:
 *
 * 

 *   public interface TestActivity {
 *     String activity1(String input);
 *   }
 *
 *   private static class ActivityImpl implements TestActivity {
 *    {@literal @}Override
 *     public String activity1(String input) {
 *       return Activity.getTask().getActivityType().getName() + "-" + input;
 *     }
 *   }
 *
 *  {@literal @}Test
 *   public void testSuccess() {
 *     testEnvironment.registerActivitiesImplementations(new ActivityImpl());
 *     TestActivity activity = testEnvironment.newActivityStub(TestActivity.class);
 *     String result = activity.activity1("input1");
 *     assertEquals("TestActivity::activity1-input1", result);
 *   }
 * 
* * Use {@link TestWorkflowEnvironment} to test a workflow code. */ @VisibleForTesting public interface TestActivityEnvironment { static TestActivityEnvironment newInstance() { return newInstance(new TestEnvironmentOptions.Builder().build()); } static TestActivityEnvironment newInstance(TestEnvironmentOptions options) { return new TestActivityEnvironmentInternal(options); } /** * Registers activity implementations to test. Use {@link #newActivityStub(Class)} to create stubs * that can be used to invoke them. */ void registerActivitiesImplementations(Object... activityImplementations); /** * Creates a stub that can be used to invoke activities registered through {@link * #registerActivitiesImplementations(Object...)}. * * @param activityInterface activity interface class that the object under test implements. * @param Type of the activity interface. * @return The stub that implements the activity interface. */ T newActivityStub(Class activityInterface); /** * Sets a listener that is called every time an activity implementation heartbeats through {@link * com.uber.cadence.activity.Activity#heartbeat(Object)}. * * @param detailsClass class of the details passed to the {@link * com.uber.cadence.activity.Activity#heartbeat(Object)}. * @param listener listener to register. * @param Type of the heartbeat details. */ void setActivityHeartbeatListener(Class detailsClass, Consumer listener); /** * Sets a listener that is called every time an activity implementation heartbeats through {@link * com.uber.cadence.activity.Activity#heartbeat(Object)}. * * @param detailsClass class of the details passed to the {@link * com.uber.cadence.activity.Activity#heartbeat(Object)}. * @param detailsType type of the details. Differs for detailsClass for generic types. * @param listener listener to register. * @param Type of the heartbeat details. */ void setActivityHeartbeatListener( Class detailsClass, Type detailsType, Consumer listener); void setWorkflowService(IWorkflowService workflowService); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy