mock objects in functional testing sven rosvall. dimension data cloud business unit

31
Mock Objects in Functional Testing Sven Rosvall

Upload: alberta-underwood

Post on 19-Jan-2016

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Mock Objects in

Functional TestingSven Rosvall

Page 2: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Dimension DataCloud Business Unit

Page 3: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Testing Lifecycle

Unit Test Functional Test System Test Production

Page 4: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Unit Testing

Page 5: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Functional Testing

Page 6: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

System Testing

Page 7: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Production

Page 8: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Unit Test Functional Test System Test Production

Test Responsibilities

Developer Tester Operat

ors

Page 9: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Test Environments

Desktop

Test Environment

Production

Unit Test Functional Test System Test Production

Developer

Tester

Operators

Page 10: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Test Environment

Page 11: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Test Environments

Desktop

Test Environment

Production

Unit Test Functional Test System Test Production

Developer

Tester

Operators

Page 12: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Test in Production

Page 13: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Test in Production

Page 14: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Test Environments

Desktop

Test Environment

Production

Unit Test Functional Test System Test Production

Developer

Tester

Operators

Page 15: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Functional TestingTest

Frame-work

Page 16: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Mocking Dependent ServicesGoals:• Mimic required functionality for testing• Easy to maintain and to deploy• Verify requests• Control expected responses• Remove indirect dependencies

Page 17: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Modes of communication

• Synchronous Requests• Asynchronous Messages• Files• Shared memory• Database updates and triggers

Page 18: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Mocking an HTTP service

Test Harness Mock Service

Test Harness

Mock Service

Simple mock HTTP service

Embedded HTTP service within test program

Page 19: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

WireMock

String responsePayload = fromFile("GetDeviceResponse_ok.json");

stubFor(get(urlEqualTo("/api/device?limit=100" + "&filter.component_unique_id=" + vmRefId + "&filter.component_root_device=" + vcenterDID)) .withHeader("Authorization", equalTo("Basic " + new String(basicAuth, Charset.forName("UTF-8")))) .willReturn(aResponse() .withHeader("Content-Type", "application/json") .withStatus(HttpStatus.SC_OK) .withBody(responsePayload)));

@Rulepublic WireMockRule wireMockRule = new WireMockRule(PORT);

Page 20: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Asynchronous Communication

Test Harness

Page 21: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Proprietary Communication

• Protocol is hidden in a client library.• Protocol is verbose and complex.

Page 22: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Solution: Mock Client Library

Test Harness

Page 23: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Mock Client Library

• Use a back door connection for:• Response data• Inspecting request data• Control exceptions

• Backdoor runs in its own thread.• May require care when serializing data.• Use same technology as is used for the service’s

inputs.

Page 24: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Application state

Stateless Stateful

State kept in some dependent service.

State kept in application.

No need to set up state before each test case.

Run application functionality to set state correctly for each test.

Run test cases in any order. or ...Run tests in specific order to use state set in previous tests.

Page 25: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Database Usage

• Database stores state.• Database as part of the application?• Resetting content between tests.• Mocking Database Access Layer

Page 26: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Database and Application

“Database is a part of the application”

“Database is a dependent service”

ORM make database schema tightly coupled to the application.

Database developed independently of application internal structures.

Don’t let schema bleed into the test code.

Test code is allowed full access to database

Page 27: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Database Preparation

• Use a golden image of database for quick start. May contain lots of static data.• Recreate schema and data• Recreate data only• Roll-back data changed during test

• Prepare test specific data• Tests that don’t update database

Page 28: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Inputs and outputs

• For a stateless service• Identify input stimuli and the side effects they

cause.• Split each scenario to include one stimulus only.

Page 29: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Input Stimuli

• HTTP requests• Messages• Database triggers• File creation

Page 30: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Minimize test scenario scopes

Page 31: Mock Objects in Functional Testing Sven Rosvall. Dimension Data Cloud Business Unit

Questions