---
id: video/hNom9ZZuca0
type: video
title: "What's new: Testability Enhancements (2026 release wave 2)"
summary: "AL testability enhancements from the 2026 release wave 2 video: data-driven testing (one test method run against multiple data sets through a test data source interface and test context) and test handlers (ITestHandler) for setup, teardown and skipping at codeunit, procedure and test-case level."
tier: official
language: en
tags:
  - data-driven testing
  - test handlers
  - test context
  - test setup and teardown
  - al testing framework
  - test explorer
  - resource files
  - telemetry
  - token consumption
  - test skipping
system: development
review:
  state: reviewed
  by: opus
  at: "2026-10-07T22:44:14.554Z"
  flags: []
generated:
  at: "2026-10-09T00:29:02.995Z"
  pipeline: 0.2.0
  prompts:
    extract-video: 1
    summarize-video: 2
  input_hash: 01527fb5028bbbdc5caedb5ac83d650c2391be5b03c9028625e904a58e84281b
evidence:
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=32s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 32
    quote: finally we have introduced it into ALE and this allows you for having just a single test point but with testing it with multiple
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=63s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 63
    quote: this is so critical that we can broaden our test um scope to such an extent that we gain the trust uh and confidence
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=208s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 208
    quote: So all of this is gives you the the flexibility of implementing just the data source that you uh want and need. So right
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=261s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 261
    quote: test handlers are a way for us to provide test setup and tear down functionality in ALE
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=326s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 326
    quote: we also have these default test handlers uh or I like to think of them as global test handlers because they run on every
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=446s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 446
    quote: a lot of these have well all of these have default implementations. This means that you know if you if you're writing a test
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=507s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 507
    quote: these um test handlers are separate from the test toolkit events that are driven by AL test runners
  - kind: video
    url: https://www.youtube.com/watch?v=hNom9ZZuca0&t=545s
    title: "What's new: Testability Enhancements (2026 release wave 2)"
    date: "2026-10-01T00:00:00Z"
    commit: null
    t: 545
    quote: one common use case nowadays for us internally is we use it for managing token consumption. So you might want to say hey u
links:
  learn: []
  objects: []
  features:
    - feature/573333
    - feature/573334
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
video_id: hNom9ZZuca0
channel: yt-microsoft
source_name: Microsoft Dynamics 365 Business Central (YouTube)
url: https://www.youtube.com/watch?v=hNom9ZZuca0
published_at: "2026-10-01T00:00:00Z"
duration_s: 604
captions: full
audience:
  - developer
chapters:
  - t: 0
    title: Introduction and Agenda
  - t: 32
    title: Data-driven Testing Overview
  - t: 73
    title: Data-driven Testing Demo in VS Code
  - t: 143
    title: Data Source Implementation and Test Context
  - t: 222
    title: Data-driven Testing in AL Tooling
  - t: 261
    title: Test Handlers Concept and Granularity Levels
  - t: 312
    title: Opt-in vs Default Test Handlers
  - t: 373
    title: Test Handler Registration and Interface Implementation
  - t: 463
    title: Test Handler Properties and Patterns
  - t: 545
    title: Use Cases and Conclusion
features:
  - name: Data-driven Testing in AL
    status: ga
    t: 32
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: Test Data Source Interface
    status: ga
    t: 155
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: Data-driven Testing in Visual Studio Code
    status: ga
    t: 89
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: Data-driven Testing in AL Tooling and MCP
    status: ga
    t: 222
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573334"
  - name: Test Handlers
    status: ga
    t: 261
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: Opt-in Test Handlers
    status: ga
    t: 326
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: Default Test Handlers
    status: ga
    t: 326
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: ITestHandler Interface
    status: ga
    t: 425
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: Test Handlers Property
    status: ga
    t: 463
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
  - name: Test Case Skipping via Test Handlers
    status: ga
    t: 526
    verified: false
    status_source: roadmap
    roadmap_ids:
      - "573333"
objects_mentioned:
  - interface ITestHandler
  - interface ITestContext
quotes:
  - t: 32
    text: finally we have introduced it into ALE and this allows you for having just a single test point but with testing it with multiple
    check: exact
  - t: 63
    text: this is so critical that we can broaden our test um scope to such an extent that we gain the trust uh and confidence
    check: exact
  - t: 208
    text: So all of this is gives you the the flexibility of implementing just the data source that you uh want and need. So right
    check: exact
  - t: 261
    text: test handlers are a way for us to provide test setup and tear down functionality in ALE
    check: exact
  - t: 326
    text: we also have these default test handlers uh or I like to think of them as global test handlers because they run on every
    check: exact
  - t: 446
    text: a lot of these have well all of these have default implementations. This means that you know if you if you're writing a test
    check: exact
  - t: 507
    text: these um test handlers are separate from the test toolkit events that are driven by AL test runners
    check: exact
  - t: 545
    text: one common use case nowadays for us internally is we use it for managing token consumption. So you might want to say hey u
    check: exact
---

# What's new: Testability Enhancements (2026 release wave 2)

> AL testability enhancements from the 2026 release wave 2 video: data-driven testing (one test method run against multiple data sets through a test data source interface and test context) and test handlers (ITestHandler) for setup, teardown and skipping at codeunit, procedure and test-case level.

[Watch on YouTube](https://www.youtube.com/watch?v=hNom9ZZuca0) · Microsoft Dynamics 365 Business Central (YouTube) · 2026-10-01 · 10:04 · tier official · reviewed (checked by Opus)

## Overview

The video covers two additions to the AL testing framework. Data-driven testing lets a single test method run with several data sets, so coverage grows by adding data points instead of duplicating test methods. A custom data source implements an interface and returns a strongly-typed test context. The source can read from resource files, AL tables or web services. The feature is demoed in the VS Code test explorer, where individual test cases can be run and debugged.

Test handlers provide setup and teardown at several levels. They come in two kinds: opt-in handlers, declared on a test codeunit through a test handlers property, and default (global) handlers that run on every test. The video also describes using handlers to skip test cases, for example to manage token consumption and AI credits.

## Key points

- Data-driven testing runs one test method against multiple data sets, so you add data points instead of copying test methods.
- A custom test data source implements an interface with two functions: one lists the test cases and one builds the test context. It can return a strongly-typed test context and read from resource files, AL tables or web services.
- Data-driven tests work with the VS Code test explorer, including selective test case execution and debugging, after the test has run once. They can also run through the AL tool and the AL MCP connection.
- The AI test toolkit does not use the new capabilities yet, so its tests cannot be run from VS Code. Migration is planned.
- Test handlers bring back setup and teardown hooks that were lost when moving from AL test runners to platform test runners.
- ITestHandler has hooks before and after the test codeunit, the test procedure and each data-driven test case. All methods have default implementations, so you override only the ones you need.
- Handlers are registered through enum extensions: extending the test handler enum gives opt-in handlers, and extending the default test handler enum gives global handlers that run on every test, including tests in other apps.

## Chapters

- [0:00](https://www.youtube.com/watch?v=hNom9ZZuca0&t=0s) Introduction and Agenda
- [0:32](https://www.youtube.com/watch?v=hNom9ZZuca0&t=32s) Data-driven Testing Overview
- [1:13](https://www.youtube.com/watch?v=hNom9ZZuca0&t=73s) Data-driven Testing Demo in VS Code
- [2:23](https://www.youtube.com/watch?v=hNom9ZZuca0&t=143s) Data Source Implementation and Test Context
- [3:42](https://www.youtube.com/watch?v=hNom9ZZuca0&t=222s) Data-driven Testing in AL Tooling
- [4:21](https://www.youtube.com/watch?v=hNom9ZZuca0&t=261s) Test Handlers Concept and Granularity Levels
- [5:12](https://www.youtube.com/watch?v=hNom9ZZuca0&t=312s) Opt-in vs Default Test Handlers
- [6:13](https://www.youtube.com/watch?v=hNom9ZZuca0&t=373s) Test Handler Registration and Interface Implementation
- [7:43](https://www.youtube.com/watch?v=hNom9ZZuca0&t=463s) Test Handler Properties and Patterns
- [9:05](https://www.youtube.com/watch?v=hNom9ZZuca0&t=545s) Use Cases and Conclusion

## Features

| Feature | Status | At |
|---|---|---|
| Data-driven Testing in AL | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [0:32](https://www.youtube.com/watch?v=hNom9ZZuca0&t=32s) |
| Test Data Source Interface | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [2:35](https://www.youtube.com/watch?v=hNom9ZZuca0&t=155s) |
| Data-driven Testing in Visual Studio Code | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [1:29](https://www.youtube.com/watch?v=hNom9ZZuca0&t=89s) |
| Data-driven Testing in AL Tooling and MCP | generally available (roadmap [Run AL tests from command-line and CI/CD workflows](../features/573334.md)) | [3:42](https://www.youtube.com/watch?v=hNom9ZZuca0&t=222s) |
| Test Handlers | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [4:21](https://www.youtube.com/watch?v=hNom9ZZuca0&t=261s) |
| Opt-in Test Handlers | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [5:26](https://www.youtube.com/watch?v=hNom9ZZuca0&t=326s) |
| Default Test Handlers | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [5:26](https://www.youtube.com/watch?v=hNom9ZZuca0&t=326s) |
| ITestHandler Interface | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [7:05](https://www.youtube.com/watch?v=hNom9ZZuca0&t=425s) |
| Test Handlers Property | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)), demoed | [7:43](https://www.youtube.com/watch?v=hNom9ZZuca0&t=463s) |
| Test Case Skipping via Test Handlers | generally available (roadmap [Build extensible and data-driven AL test suites](../features/573333.md)) | [8:46](https://www.youtube.com/watch?v=hNom9ZZuca0&t=526s) |

A status with a roadmap link comes from the Microsoft 365 roadmap feature this part of the video covers (matched by Haiku; links Opus dropped are not used); other statuses need a status word in the video itself.

## AL objects mentioned

As heard in the captions. A name that matches one object page by exact type and name links to it; the others stay as named.

- interface "ITestHandler" at [7:05](https://www.youtube.com/watch?v=hNom9ZZuca0&t=425s)
- interface "ITestContext" at [3:01](https://www.youtube.com/watch?v=hNom9ZZuca0&t=181s)

Not found in BC28-30: interface "ITestHandler", interface "ITestContext".

## Quotes

- [0:32](https://www.youtube.com/watch?v=hNom9ZZuca0&t=32s) "finally we have introduced it into ALE and this allows you for having just a single test point but with testing it with multiple"
- [1:03](https://www.youtube.com/watch?v=hNom9ZZuca0&t=63s) "this is so critical that we can broaden our test um scope to such an extent that we gain the trust uh and confidence"
- [3:28](https://www.youtube.com/watch?v=hNom9ZZuca0&t=208s) "So all of this is gives you the the flexibility of implementing just the data source that you uh want and need. So right"
- [4:21](https://www.youtube.com/watch?v=hNom9ZZuca0&t=261s) "test handlers are a way for us to provide test setup and tear down functionality in ALE"
- [5:26](https://www.youtube.com/watch?v=hNom9ZZuca0&t=326s) "we also have these default test handlers uh or I like to think of them as global test handlers because they run on every"
- [7:26](https://www.youtube.com/watch?v=hNom9ZZuca0&t=446s) "a lot of these have well all of these have default implementations. This means that you know if you if you're writing a test"
- [8:27](https://www.youtube.com/watch?v=hNom9ZZuca0&t=507s) "these um test handlers are separate from the test toolkit events that are driven by AL test runners"
- [9:05](https://www.youtube.com/watch?v=hNom9ZZuca0&t=545s) "one common use case nowadays for us internally is we use it for managing token consumption. So you might want to say hey u"

## Disclaimers in the video

- [3:56](https://www.youtube.com/watch?v=hNom9ZZuca0&t=236s) coming-later: AI test toolkit is not yet using these new capabilities which means that you are not able to run these from Visual Studio Code. Um but that's just a matter of time. we are planning on migrating them to this new system.

Presenters (as heard): Thomas, Thaddius.
