Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document MSTEST0039 and MSTEST0040 #44419

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/core/testing/mstest-analyzers/mstest0035.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "[DeploymentItem] can be specified only on test class or test method."
title: "MSTEST0035: [DeploymentItem] can be specified only on test class or test method."
description: "Learn about code analysis rule MSTEST0035: `[DeploymentItem]` can be specified only on test class or test method."
ms.date: 08/02/2024
f1_keywords:
Expand Down
2 changes: 1 addition & 1 deletion docs/core/testing/mstest-analyzers/mstest0036.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "Do not use shadowing inside test class."
title: "MSTEST0036: Do not use shadowing inside test class."
description: "Learn about code analysis rule MSTEST0036: Do not use shadowing inside test class."
ms.date: 08/19/2024
f1_keywords:
Expand Down
2 changes: 1 addition & 1 deletion docs/core/testing/mstest-analyzers/mstest0037.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "Use proper 'Assert' methods"
title: "MSTEST0037: Use proper 'Assert' methods"
description: "Learn about code analysis rule MSTEST0037: Use proper 'Assert' methods."
ms.date: 11/17/2024
f1_keywords:
Expand Down
2 changes: 1 addition & 1 deletion docs/core/testing/mstest-analyzers/mstest0038.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "Don't use 'Assert.AreSame' or 'Assert.AreNotSame' with value types"
title: "MSTEST0038: Don't use 'Assert.AreSame' or 'Assert.AreNotSame' with value types"
description: "Learn about code analysis rule MSTEST0038: Don't use 'Assert.AreSame' or 'Assert.AreNotSame' with value types"
ms.date: 01/06/2025
f1_keywords:
Expand Down
41 changes: 41 additions & 0 deletions docs/core/testing/mstest-analyzers/mstest0039.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
title: "MSTEST0039: Use newer 'Assert.Throws' methods"
description: "Learn about code analysis rule MSTEST0039: Use 'Assert.ThrowsExactly' instead of 'Assert.ThrowsException'"
ms.date: 01/17/2025
f1_keywords:
- MSTEST0039
- UseNewerAssertThrowsAnalyzer
helpviewer_keywords:
- UseNewerAssertThrowsAnalyzer
- MSTEST0039
author: Youssef1313
ms.author: ygerges
---
# MSTEST0039: Use newer 'Assert.Throws' methods

| Property | Value |
|-------------------------------------|------------------------------------------------------------------------|
| **Rule ID** | MSTEST0039 |
| **Title** | Use newer 'Assert.Throws' methods |
| **Category** | Usage |
| **Fix is breaking or non-breaking** | Non-breaking |
| **Enabled by default** | Yes |
| **Default severity** | Info |
| **Introduced in version** | 3.8.0 |
| **Is there a code fix** | Yes |

## Cause

The use of <xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ThrowsException*?displayProperty=nameWithType> or <xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ThrowsExceptionAsync*?displayProperty=nameWithType> which are no longer recommended.

## Rule description

<xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ThrowsException*?displayProperty=nameWithType> and <xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ThrowsExceptionAsync*?displayProperty=nameWithType> are not recommended and may be deprecated in the future.

## How to fix violations

Instead, use `Assert.ThrowsExactly` or `Assert.ThrowsExactlyAsync` instead of `Assert.ThrowsException` or `Assert.ThrowsExceptionAsync`.

## When to suppress warnings

Do not suppress a warning from this rule. It's strongly recommended to move from the old APIs to the new ones.
41 changes: 41 additions & 0 deletions docs/core/testing/mstest-analyzers/mstest0040.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
title: "MSTEST0040: Do not assert inside 'async void' contexts"
description: "Learn about code analysis rule MSTEST0040: Do not assert inside 'async void' methods, local functions, or lambdas because they may not fail the test"
ms.date: 01/17/2025
f1_keywords:
- MSTEST0040
- AvoidUsingAssertsInAsyncVoidContextAnalyzer
helpviewer_keywords:
- AvoidUsingAssertsInAsyncVoidContextAnalyzer
- MSTEST0040
author: Youssef1313
ms.author: ygerges
---
# MSTEST0040: Do not assert inside 'async void' contexts

| Property | Value |
|-------------------------------------|------------------------------------------------------------------------|
| **Rule ID** | MSTEST0040 |
| **Title** | Do not assert inside 'async void' contexts |
| **Category** | Usage |
| **Fix is breaking or non-breaking** | Non-breaking |
| **Enabled by default** | Yes |
| **Default severity** | Warning |
| **Introduced in version** | 3.8.0 |
| **Is there a code fix** | No |

## Cause

The use of any assertion method in an `async void` method, local function, or lambda.

## Rule description

Exceptions that are thrown in an `async void` context are unhandled. A failing assertion in an `async void` method will be swallowed and will not crash the process when using VSTest under .NET Framework, and may crash the process when using Microsoft.Testing.Platform or VSTest under modern .NET.

## How to fix violations

Refactor the code to not use assertions in `async void`.

## When to suppress warnings

Do not suppress a warning from this rule.
2 changes: 2 additions & 0 deletions docs/core/testing/mstest-analyzers/usage-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,5 @@ Identifier | Name | Description
[MSTEST0035](mstest0035.md) | UseDeploymentItemWithTestMethodOrTestClassTitle | `[DeploymentItem]` can be specified only on test class or test method
[MSTEST0037](mstest0037.md) | UseProperAssertMethodsAnalyzer | Use proper `Assert` methods
[MSTEST0038](mstest0038.md) | AvoidAssertAreSameWithValueTypesAnalyzer | Don't use `Assert.AreSame` or `Assert.AreNotSame` with value types
[MSTEST0039](mstest0039.md) | UseNewerAssertThrowsAnalyzer | Use newer 'Assert.Throws' methods
[MSTEST0040](mstest0040.md) | AvoidUsingAssertsInAsyncVoidContextAnalyzer | Do not assert inside 'async void' contexts
4 changes: 4 additions & 0 deletions docs/navigate/devops-testing/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,10 @@ items:
href: ../../core/testing/mstest-analyzers/mstest0037.md
- name: MSTEST0038
href: ../../core/testing/mstest-analyzers/mstest0038.md
- name: MSTEST0039
href: ../../core/testing/mstest-analyzers/mstest0039.md
- name: MSTEST0040
href: ../../core/testing/mstest-analyzers/mstest0040.md
- name: Microsoft Testing Platform
items:
- name: Overview
Expand Down
Loading