Search Results for

    Show / Hide Table of Contents

    NUnit2047

    Incompatible types for Within constraint

    Topic Value
    Id NUnit2047
    Severity Warning
    Enabled True
    Category Assertion
    Code WithinUsageAnalyzer

    Description

    The Within modifier should only be used for numeric or Date/Time arguments or tuples containing only these element types. Using it on other types will not have any effect.

    Motivation

    To bring developers' attention to a scenario in which their code is actually having no effect and may reveal that their test is not doing what they expect.

    How to fix violations

    Example Violation

    [Test]
    public void RecordsEqualsMismatch()
    {
        var a = new Data(1, 1.0);
        var b = new Data(1, 1.1);
    
        Assert.That(a, Is.EqualTo(b).Within(0.2), $"{a} != {b}");
    }
    
    private sealed record Data(int number, double Value);
    

    Explanation

    Using Within here doesn't make any sense, because NUnit cannot apply comparison with tolerance to the types we're comparing.

    Fix

    Remove the errant call to Within:

    [Test]
    public void RecordsEqualsMismatch()
    {
        var a = new Data(1, 1.0);
        var b = new Data(1, 1.1);
    
        Assert.That(a, Is.EqualTo(b), $"{a} != {b}");
    }
    
    private sealed record Data(int number, double Value);
    

    Configure severity

    Via ruleset file

    Configure the severity per project, for more info see MSDN.

    Via .editorconfig file

    # NUnit2047: Incompatible types for Within constraint
    dotnet_diagnostic.NUnit2047.severity = chosenSeverity
    

    where chosenSeverity can be one of none, silent, suggestion, warning, or error.

    Via #pragma directive

    #pragma warning disable NUnit2047 // Incompatible types for Within constraint
    Code violating the rule here
    #pragma warning restore NUnit2047 // Incompatible types for Within constraint
    

    Or put this at the top of the file to disable all instances.

    #pragma warning disable NUnit2047 // Incompatible types for Within constraint
    

    Via attribute [SuppressMessage]

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Assertion",
        "NUnit2047:Incompatible types for Within constraint",
        Justification = "Reason...")]
    
    • Edit this page
    In this article
    Back to top Generated by DocFX | Copyright (c) 2018- The NUnit Project - Licensed under CC BY-NC-SA 4.0