Skip to content

Commit

Permalink
Document MSTEST0039 and MSTEST0040 (#44419)
Browse files Browse the repository at this point in the history
* Document MSTEST0039 and MSTEST0040

* Fix markdownlint violation

* Reword

* Update further

* Apply suggestions from code review

Co-authored-by: Genevieve Warren <[email protected]>

---------

Co-authored-by: Genevieve Warren <[email protected]>
  • Loading branch information
Youssef1313 and gewarren authored Jan 22, 2025
1 parent 5452826 commit 295d55a
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 4 deletions.
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 might be deprecated in the future.

## How to fix violations

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. Under .NET, a failing assertion in an `async void` method might crash the process when using Microsoft.Testing.Platform or VSTest. In cases where a custom `SynchronizationContext` is present that catches the exception, the failing assertion might be silently swallowed.

## 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

0 comments on commit 295d55a

Please sign in to comment.