Bird
Raised Fist0
Terraformcloud~10 mins

Mock providers in tests in Terraform - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Mock providers in tests
Write Terraform config
Define mock provider
Run terraform test
Terraform uses mock provider
Test resource creation & outputs
Verify expected behavior
Test passes or fails
This flow shows how Terraform tests use mock providers to simulate real providers, allowing tests to run without actual cloud resources.
Execution Sample
Terraform
terraform {
  required_providers {
    mock = {
      source = "hashicorp/mock"
      version = "~> 0.1"
    }
  }
}

provider "mock" {}

resource "mock_resource" "test" {
  name = "example"
}
This Terraform code sets up a mock provider and a mock resource to test resource creation without real cloud calls.
Process Table
StepActionTerraform StateMock Provider BehaviorTest Outcome
1Initialize Terraform with mock providerNo resources createdMock provider ready to simulateNo test result yet
2Apply configurationResource 'mock_resource.test' plannedSimulates resource creationResource creation simulated
3Terraform creates mock_resource.testResource state stored in memoryReturns fake ID and attributesResource appears created
4Run test assertionsResource state accessibleMock provider returns expected outputsAssertions pass if outputs match
5Test completesState unchangedNo real cloud calls madeTest passes if all assertions succeed
6ExitTest environment cleanedMocks resetTesting ends
💡 Test ends after assertions pass or fail; no real infrastructure is created due to mock provider
Status Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
terraform_stateemptyplanned resource mock_resource.testresource created in memoryresource state accessiblecleaned
mock_providerinitializedready to simulatereturns fake resource IDreturns expected outputsreset
Key Moments - 3 Insights
Why does the test not create real cloud resources?
Because the mock provider simulates resource creation and returns fake data, as shown in execution_table steps 2 and 3.
How does Terraform know to use the mock provider during tests?
The Terraform configuration specifies the mock provider source and version, so Terraform uses it instead of a real provider (see execution_table step 1).
What happens if the mock provider returns unexpected outputs?
Test assertions will fail during step 4, causing the test to fail, since outputs do not match expected values.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the Terraform state after step 3?
AResource state stored in memory
BNo resources created
CResource state cleaned
DResource planned but not created
💡 Hint
Check the 'Terraform State' column in row for step 3
At which step does the mock provider simulate resource creation?
AStep 1
BStep 4
CStep 2
DStep 5
💡 Hint
Look at the 'Mock Provider Behavior' column for when resource creation is simulated
If the mock provider returned wrong outputs, what would happen in the test?
ATest assertions would pass
BTest assertions would fail
CTerraform would create real resources
DTerraform would skip resource creation
💡 Hint
Refer to key_moments about unexpected outputs and execution_table step 4
Concept Snapshot
Mock providers in Terraform tests simulate real providers.
They let you test resource creation without real cloud calls.
Define mock provider in Terraform config.
Terraform uses mock provider during tests.
Tests check resource state and outputs.
No real infrastructure is created.
Full Transcript
This visual execution shows how Terraform uses mock providers in tests. First, Terraform config defines the mock provider. When tests run, Terraform initializes with the mock provider, which simulates resource creation by returning fake IDs and attributes. The Terraform state updates in memory without creating real cloud resources. Tests then assert expected outputs from the mock resource. If outputs match, tests pass; otherwise, they fail. After tests, the mock environment resets. This approach allows safe, fast testing of Terraform code without real infrastructure changes.

Practice

(1/5)
1. What is the main purpose of using a mock provider in Terraform tests?
easy
A. To deploy resources faster in production
B. To speed up Terraform apply by skipping resource creation
C. To simulate cloud resources without creating real ones
D. To automatically fix errors in Terraform code

Solution

  1. Step 1: Understand what mock providers do

    Mock providers simulate cloud resources so tests can run without real resource creation.
  2. Step 2: Compare options

    Only To simulate cloud resources without creating real ones correctly describes this purpose. Others describe unrelated or incorrect uses.
  3. Final Answer:

    To simulate cloud resources without creating real ones -> Option C
  4. Quick Check:

    Mock provider purpose = simulate resources [OK]
Hint: Mock providers simulate resources without real creation [OK]
Common Mistakes:
  • Thinking mock providers speed up production deploys
  • Believing mock providers fix code automatically
  • Confusing mock providers with real cloud providers
2. Which of the following is the correct way to declare a mock provider in Terraform test configuration?
easy
A. provider "mock" {}
B. mock_provider {}
C. provider mock {}
D. mock "provider" {}

Solution

  1. Step 1: Recall Terraform provider syntax

    Providers are declared with provider "name" {} syntax.
  2. Step 2: Identify correct syntax for mock provider

    provider "mock" {} matches this syntax exactly. Others are invalid Terraform syntax.
  3. Final Answer:

    provider "mock" {} -> Option A
  4. Quick Check:

    Provider declaration = provider "name" {} [OK]
Hint: Provider blocks use provider "name" {} syntax [OK]
Common Mistakes:
  • Using underscores instead of quotes
  • Omitting the provider keyword
  • Swapping provider and name order
3. Given this Terraform test snippet using a mock provider:
resource "mock_resource" "test" {
  name = "example"
}

output "resource_name" {
  value = mock_resource.test.name
}

What will the output value be when running the test?
medium
A. null
B. "mock_resource.test.name"
C. Error: resource not found
D. "example"

Solution

  1. Step 1: Understand mock resource behavior

    The mock provider returns the values set in the resource block during tests.
  2. Step 2: Check the output value

    The output references mock_resource.test.name which is set to "example".
  3. Final Answer:

    "example" -> Option D
  4. Quick Check:

    Output value = resource attribute value [OK]
Hint: Mock resources return set attribute values in tests [OK]
Common Mistakes:
  • Expecting null because no real resource exists
  • Assuming an error occurs without real cloud
  • Confusing output with resource address string
4. You wrote this Terraform test using a mock provider but get an error:
provider "mock" {
  version = "1.0"
}

resource "mock_resource" "test" {
  name = "test"
}

The error says: Unsupported argument: version. What is the likely cause?
medium
A. The provider block is missing required credentials
B. Mock providers do not support the 'version' argument in provider block
C. The resource name 'mock_resource' is invalid
D. Terraform version is incompatible with mock providers

Solution

  1. Step 1: Analyze the error message

    The error says 'Unsupported argument: version' inside the provider block.
  2. Step 2: Understand mock provider limitations

    Mock providers usually do not accept 'version' argument in provider blocks; it's for real providers.
  3. Final Answer:

    Mock providers do not support the 'version' argument in provider block -> Option B
  4. Quick Check:

    Provider block args must match provider capabilities [OK]
Hint: Mock providers have minimal config, no version arg [OK]
Common Mistakes:
  • Adding version argument to mock provider block
  • Assuming resource name causes this error
  • Thinking credentials are required for mock providers
5. You want to test a Terraform module that creates multiple resources using a mock provider. Which approach best ensures your tests catch errors without creating real resources?
hard
A. Configure a mock provider and write tests that check resource attributes and dependencies
B. Run Terraform apply with real provider but in a separate test account
C. Use mock provider only for outputs, but real provider for resources
D. Skip provider configuration and test only variable inputs

Solution

  1. Step 1: Understand testing goals with mock providers

    Mock providers simulate resource creation so tests can verify attributes and dependencies safely.
  2. Step 2: Evaluate options for safe and effective testing

    Configure a mock provider and write tests that check resource attributes and dependencies uses mock provider fully and tests resource details, which is best practice.
  3. Step 3: Eliminate unsafe or incomplete options

    Options B and C involve real resources risking cost and side effects; D skips important tests.
  4. Final Answer:

    Configure a mock provider and write tests that check resource attributes and dependencies -> Option A
  5. Quick Check:

    Mock provider + attribute tests = safe, thorough testing [OK]
Hint: Use mock provider to test resource attributes and dependencies [OK]
Common Mistakes:
  • Testing with real providers risking cost
  • Mixing mock and real providers in tests
  • Ignoring resource attribute checks