diff --git a/fern/docs.yml b/fern/docs.yml
index a28889215..7098e1cc2 100644
--- a/fern/docs.yml
+++ b/fern/docs.yml
@@ -196,6 +196,9 @@ redirects:
- source: /learn/sdks/capabilities/idempotency-headers
destination: /learn/sdks/deep-dives/idempotency
permanent: true
+ - source: /learn/sdks/capabilities/integration-tests
+ destination: /learn/sdks/deep-dives/testing
+ permanent: true
# SDK Package Managers redirects
- source: /learn/sdks/package-managers/:slug*
diff --git a/fern/products/sdks/capabilities.mdx b/fern/products/sdks/capabilities.mdx
index f6e484c97..56486cf36 100644
--- a/fern/products/sdks/capabilities.mdx
+++ b/fern/products/sdks/capabilities.mdx
@@ -60,8 +60,8 @@ layout: overview
Stream JSON data from your server to your client (i.e. chat completions)
-
- Test your SDK against a mock server
+
+ Auto-generated and handwritten tests to ensure your SDK works in production
No longer depend on manually written code snippets
diff --git a/fern/products/sdks/guides/testing.mdx b/fern/products/sdks/guides/testing.mdx
new file mode 100644
index 000000000..a62dc2f3d
--- /dev/null
+++ b/fern/products/sdks/guides/testing.mdx
@@ -0,0 +1,38 @@
+---
+title: Testing
+description: Fern automatically generates unit tests and mock server tests for SDKs to ensure quality before release
+---
+
+Fern provides comprehensive testing for your SDKs through generated and handwritten tests.
+
+## Generated tests
+
+
+
+Fern auto-generates tests that must pass before SDK release. Fern generates a GitHub workflow in each SDK repository that runs unit tests and any enabled mock server tests on every pull request, commit, and release.
+
+### Unit tests
+
+Fern generates unit tests for all SDK languages. They verify individual methods in isolation without making network calls.
+
+### Mock server tests
+
+Mock server (wire) tests run your SDK against a mock server generated from your API definition. They verify that the SDK sends HTTP requests and receives HTTP responses as expected. These tests are generated for all endpoints in a service.
+
+Mock server tests are available for TypeScript, Go, and Java. Configure mock server tests in your `generators.yml`:
+
+| Language | Configuration | Default |
+|----------|---------------|---------|
+| TypeScript | [`generateWireTests`](/sdks/generators/typescript/configuration#generatewiretests) | true |
+| Go | [`enableWireTests`](/sdks/generators/go/configuration#enablewiretests) | false |
+| Java | [`enable-wire-tests`](/sdks/generators/java/configuration#enablewiretests) | false |
+
+## Integration tests
+
+
+
+Handwritten integration tests run against your real API server to test end-to-end functionality with live data.
+
+## Adding additional tests
+
+You can add custom tests directly to your SDK repositories. Include test files in your `.fernignore` file to prevent overwrites during regeneration.
\ No newline at end of file
diff --git a/fern/products/sdks/overview/go/configuration.mdx b/fern/products/sdks/overview/go/configuration.mdx
index 9630d4435..0e33df6a1 100644
--- a/fern/products/sdks/overview/go/configuration.mdx
+++ b/fern/products/sdks/overview/go/configuration.mdx
@@ -36,6 +36,10 @@ Specifies the name of the generated client struct. This determines the primary c
Sets the name of the exported client that will be used in code snippets and documentation examples. This is useful for customizing how the client appears in generated documentation.
+
+When enabled, generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
+
+
Use this option if you plan to depend on the generated Go SDK from within your project, and **not** depend on it as a separate, published Go module.
diff --git a/fern/products/sdks/overview/java/configuration.mdx b/fern/products/sdks/overview/java/configuration.mdx
index 0e1f446a0..a88a46e7d 100644
--- a/fern/products/sdks/overview/java/configuration.mdx
+++ b/fern/products/sdks/overview/java/configuration.mdx
@@ -66,6 +66,10 @@ When enabled, generates inline types for nested schemas instead of creating sepa
When enabled, generates public constructors for model types.
+
+When enabled, generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
+
+
When enabled, generates unknown or untyped properties as structured JSON objects instead of raw Object types. This provides better type safety and easier manipulation of dynamic JSON content while maintaining flexibility for unknown data structures.
diff --git a/fern/products/sdks/overview/typescript/configuration.mdx b/fern/products/sdks/overview/typescript/configuration.mdx
index 0dee1b25f..9332a7c42 100644
--- a/fern/products/sdks/overview/typescript/configuration.mdx
+++ b/fern/products/sdks/overview/typescript/configuration.mdx
@@ -172,6 +172,10 @@ Choose whether you want to support Node.js 16 and above (`Node16`), or Node.js 1
* `Node18` uses the native FormData API, and accepts a wider range of types for file uploads, such as `Buffer`, `File`, `Blob`, `Readable`, `ReadableStream`, `ArrayBuffer`, and `Uint8Array`
+
+Generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
+
+
Includes the content type and content length from binary responses. The user will receive an object of the following type:
diff --git a/fern/products/sdks/sdks.yml b/fern/products/sdks/sdks.yml
index 656aee84a..a023942f4 100644
--- a/fern/products/sdks/sdks.yml
+++ b/fern/products/sdks/sdks.yml
@@ -234,6 +234,8 @@ navigation:
- page: Self-hosted SDKs
path: ./guides/self-hosted.mdx
slug: self-hosted
+ - page: Testing
+ path: ./guides/testing.mdx
- section: Reference
contents:
- page: generators.yml