Search Results for

    Show / Hide Table of Contents

    NUnit3001

    Expression was checked in an ClassicAssert.NotNull, ClassicAssert.IsNotNull or Assert.That call

    Topic Value
    Id NUnit3001
    Severity Info
    Enabled True
    Category Suppressor
    Code DereferencePossiblyNullReferenceSuppressor

    Description

    This rule check diagnostics reported by the CS8601-CS8607 and CS8629 compiler errors:

    CS8602: Dereference of a possibly null reference.

    It then checks the previous statements for one of:

    • ClassicAssert.NotNull(...)
    • ClassicAssert.IsNotNull(...)
    • Assert.That(..., Is.Not.Null)

    For the same expression as the one that raised the original compiler error. If found, the compiler error is suppressed.

    The rule also covers CS8629: Nullable value type may be null

    In this case, the previous statement is allowed to be one of:

    • Assert.That(...HasValue)
    • Assert.That(...HasValue, Is.True)
    • ClassicAssert.True(...HasValue)
    • ClassicAssert.IsTrue(...HasValue)

    The exception is that if the statement is part of an Assert.Multiple it is not suppressed, as in this case the statement containing the compiler error will be executed.

    Motivation

    [TestFixture]
    internal sealed class SomeClassFixture
    {
        private SomeClass instance;
    
        [SetUp]
        public void Setup()
        {
            instance = new SomeClass();
        }
    
        [Test]
        public void Test()
        {
            string? result = instance.MethodUnderTest();
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Length, Is.GreaterThan(0));
        }
    
        [Test]
        public void TestMultiple()
        {
            string? result = instance.MethodUnderTest();
            Assert.Multiple(() =>
            {
                Assert.That(result, Is.Not.Null);
                Assert.That(result.Length, Is.GreaterThan(0));
            });
        }
    }
    

    In the above fixture the compiler would give a warnings because result can be null and the compiler knows nothing about the Assert.That(result, Is.Not.Null); statement.

    The first occurrence - in the Test method - will be suppressed, the second - in the TestMultiple - will not.

    How to fix violations

    Ensure that the reference is not null before dereferencing it. This can be done using regular C# language constructs or NUnit assertions.

    Configure severity

    The rule has no severity, but can be disabled.

    Via ruleset file

    To disable the rule for a project, you need to add a ruleset file

    <?xml version="1.0" encoding="utf-8"?>
    <RuleSet Name="NUnit.Analyzer Suppressions" Description="DiagnosticSuppression Rules" ToolsVersion="12.0">
      <Rules AnalyzerId="DiagnosticSuppressors" RuleNamespace="NUnit.NUnitAnalyzers">
        <Rule Id="NUnit3001" Action="Info" /> <!-- Possible Null Reference -->
        <Rule Id="NUnit3002" Action="Info" /> <!-- NonNullableField/Property is Uninitialized -->
        <Rule Id="NUnit3003" Action="Info" /> <!-- Avoid Uninstantiated Internal Classes -->
        <Rule Id="NUnit3004" Action="Info" /> <!-- Types that own disposable fields should be disposable -->
      </Rules>
    </RuleSet>
    

    and add it to the project like:

    <PropertyGroup>
      <CodeAnalysisRuleSet>NUnit.Analyzers.Suppressions.ruleset</CodeAnalysisRuleSet>
    </PropertyGroup>
    

    For more info about rulesets see MSDN.

    Via .editorconfig file

    This is currently not working. Waiting for Roslyn

    # NUnit3001: Expression was checked in an ClassicAssert.NotNull, ClassicAssert.IsNotNull or Assert.That call
    dotnet_diagnostic.NUnit3001.severity = none
    
    • 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