Dynamic Test Doubles for Decoupled Software Unit Testing

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing software testing methods rely on static test stubs and mock objects, which are limited in functionality and maintenance, and can tightly couple unit tests to the actual implementation, leading to increased maintenance needs and potential inaccuracies.

Innovation Solution

A computer-implemented method for generating dynamically configurable test doubles that detect function invocations, collect information on parameters and return types, and instrument the source code to replace original functions with test doubles that execute trigger objects encapsulating test-specific logic, allowing for dynamic configuration and runtime behavior modification.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If static test stubs are used, then test code can be separated from production code, but the test stubs must be modified whenever any test case is modified, increasing maintenance effort

Engineering Contradiction:
Improvetest accuracyVSAvoidmaintenance complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The patent transforms static test stubs into dynamic test doubles that can adapt their behavior at runtime based on test case requirements. The test double framework allows behavior to be configured dynamically through annotations and runtime setup, eliminating the need to modify stub code when test cases change. This dynamic approach maintains test accuracy while reducing maintenance complexity.

Inventive Principle:
Principle #15Dynamics

Solution Approach 2:

The patent segments the test double functionality into separate concern: the test double itself (which remains unchanged) and the behavior configuration (which is dynamically set per test case). This separation is achieved through annotations on test methods and runtime configuration, allowing test case-specific behavior to be defined without modifying the test double implementation.

Inventive Principle:
Principle #1Segmentation

2Ease of manufacture

If mock objects are used to simulate complex real objects, then unit tests can be created without incorporating real objects, but over-use of mock objects can closely couple unit tests to the actual implementation, affecting testing of internal implementation rather than external behavior

Engineering Contradiction:
Improvetest creation easeVSAvoidtesting versatility
Core Design Contradiction:
Ease of manufactureVSAdaptability or versatility

Solution Approach 1:

The patent creates a universal test double framework that can replace both mock objects and test stubs, serving multiple testing needs with a single mechanism. The framework supports configuring different behaviors (return values, throwing exceptions, verifying calls) through annotations and runtime setup, making it adaptable to various testing scenarios without being tied to specific implementation details.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Solution Approach 2:

The test double acts as an intermediary between the unit under test and any external dependencies. Rather than directly mocking specific objects, the framework provides a neutral intermediary layer that can be configured to simulate different behaviors, preventing tight coupling between tests and implementation while maintaining ease of test creation.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Ease of operation

If one test stub is used for all test cases, then management is simplified, but the test stub cannot respond to anything outside what's programmed therein for the test, limiting functionality

Engineering Contradiction:
Improvetest management easeVSAvoidtest functionality
Core Design Contradiction:
Ease of operationVSAdaptability or versatility

Solution Approach 1:

The patent implements dynamic test doubles that can change behavior based on the executing test case. Through annotations on test methods and runtime configuration, each test case can specify different behaviors for the same test double without requiring multiple static stubs. This maintains operational simplicity while enabling diverse functionality.

Inventive Principle:
Principle #15Dynamics

Solution Approach 2:

The framework allows changing the behavior parameters of test doubles based on the test case context. Annotations and runtime setup enable different return values, exception behaviors, and verification expectations to be configured for each test case, allowing one test double to serve multiple test cases with different requirements.

Inventive Principle:
Principle #35Parameter changes

Data Source

PatentUS9697109B2Dynamically configurable test doubles for software testing and validation
Publication Date: 2017.07.04 PARASOFT CORP
  • US9697109B2 patent drawing
  • US9697109B2 patent drawing
  • US9697109B2 patent drawing

AI summary

Method for generating dynamically configurable test doubles for software testing includes: detecting functions or methods invocations in a source code under test; collecting information about parameters and return types of one or more of original functions and original methods that are invoked by the source code under test, generating test doubles using source code with alternative definitions based on collected information; instrumenting the source code under test to replace the calls to one or more of original functions and methods with calls to the generated test doubles; and dynamically configuring runtime behavior of the generated test doubles, where all input parameters and return values of the one or more of original functions and original methods are provided to respective retrieved trigger objects by passing said input parameters and return values as arguments to function calls.