Bird
Raised Fist0
Terraformcloud~5 mins

Mock providers in tests in Terraform - Commands & Configuration

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
Introduction
When writing Terraform tests, you sometimes need to simulate cloud providers to test your code without creating real resources. Mock providers let you do this by pretending to be the real provider, so you can check your code's logic safely.
When you want to test your Terraform modules without incurring cloud costs.
When you need to verify your Terraform code logic without deploying real infrastructure.
When you want to run automated tests in a CI/CD pipeline without cloud access.
When you want to simulate provider responses to test error handling.
When you want to speed up tests by avoiding slow real cloud API calls.
Config File - main.tf
main.tf
terraform {
  required_providers {
    mock = {
      source  = "hashicorp/mock"
      version = "1.0.0"
    }
  }
}

provider "mock" {}

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

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

This Terraform configuration uses the mock provider to simulate a cloud provider. The mock_resource resource is a fake resource used to test your Terraform code without real infrastructure. The output shows the resource's name to verify the mock works.

Commands
This command initializes Terraform, downloads the mock provider plugin, and prepares the working directory for running Terraform commands.
Terminal
terraform init
Expected OutputExpected
Initializing the backend... Initializing provider plugins... - Finding hashicorp/mock versions matching "1.0.0"... - Installing hashicorp/mock v1.0.0... - Installed hashicorp/mock v1.0.0 (signed by HashiCorp) Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work.
This command shows what Terraform will do. It uses the mock provider to simulate creating the resource without real cloud calls.
Terminal
terraform plan
Expected OutputExpected
Refreshing Terraform state in-memory prior to plan... An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # mock_resource.example will be created + resource "mock_resource" "example" { + id = (known after apply) + name = "test-resource" } Plan: 1 to add, 0 to change, 0 to destroy.
This command applies the plan, creating the mock resource. Since it's a mock, no real infrastructure is created, but Terraform state updates as if it did.
Terminal
terraform apply -auto-approve
Expected OutputExpected
mock_resource.example: Creating... mock_resource.example: Creation complete after 1s [id=mock-resource-id] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: resource_name = "test-resource"
-auto-approve - Automatically approve the apply without prompting
This command shows the output value from the mock resource to verify the test result.
Terminal
terraform output resource_name
Expected OutputExpected
test-resource
Key Concept

If you remember nothing else from this pattern, remember: mock providers let you test Terraform code safely without creating real cloud resources.

Common Mistakes
Trying to use a mock provider without initializing Terraform first.
Terraform won't download the mock provider plugin, so commands fail.
Always run 'terraform init' before planning or applying.
Expecting mock providers to create real infrastructure.
Mock providers simulate resources only in Terraform state; no real cloud changes happen.
Use mock providers only for testing logic, not for real deployments.
Not specifying the mock provider source and version in the configuration.
Terraform cannot find or use the mock provider without this info.
Declare the mock provider in the 'required_providers' block with source and version.
Summary
Initialize Terraform to download the mock provider plugin.
Use 'terraform plan' to see simulated resource changes.
Apply the plan to update Terraform state without real infrastructure.
Use 'terraform output' to verify mock resource outputs.

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