Search Results for

    Show / Hide Table of Contents

    NUnit1016

    The source type does not have a default constructor

    Topic Value
    Id NUnit1016
    Severity Error
    Enabled True
    Category Structure
    Code TestCaseSourceUsesStringAnalyzer

    Description

    The source type must have a default constructor in order to provide test cases.

    Motivation

    To prevent tests that will fail at runtime due to improper construction.

    How to fix violations

    Example Violation

    public class MyTestClass
    {
        [TestCaseSource(typeof(DivideCases))]
        public void DivideTest(int n, int d, int q)
        {
            ClassicAssert.AreEqual(q, n / d);
        }
    }
    
    class DivideCases : IEnumerable
    {
        public DivideCases(int i) { }
    
        public IEnumerator GetEnumerator()
        {
            yield return new object[] { 12, 3, 4 };
            yield return new object[] { 12, 2, 6 };
            yield return new object[] { 12, 4, 3 };
        }
    }
    

    Explanation

    In the sample above, the class DivideCases does not have a default constructor - i.e. a constructor with no parameters.

    However, source types specified by TestCaseSource must have a default constructor.

    Fix

    Add a default constructor to the source type (or remove the parameters from an existing constructor):

    public class MyTestClass
    {
        [TestCaseSource(typeof(DivideCases))]
        public void DivideTest(int n, int d, int q)
        {
            ClassicAssert.AreEqual(q, n / d);
        }
    }
    
    class DivideCases : IEnumerable
    {
        public DivideCases() { }
    
        public DivideCases(int i) { }
    
        public IEnumerator GetEnumerator()
        {
            yield return new object[] { 12, 3, 4 };
            yield return new object[] { 12, 2, 6 };
            yield return new object[] { 12, 4, 3 };
        }
    }
    

    Configure severity

    Via ruleset file

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

    Via .editorconfig file

    # NUnit1016: The source type does not have a default constructor
    dotnet_diagnostic.NUnit1016.severity = chosenSeverity
    

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

    Via #pragma directive

    #pragma warning disable NUnit1016 // The source type does not have a default constructor
    Code violating the rule here
    #pragma warning restore NUnit1016 // The source type does not have a default constructor
    

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

    #pragma warning disable NUnit1016 // The source type does not have a default constructor
    

    Via attribute [SuppressMessage]

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Structure",
        "NUnit1016:The source type does not have a default constructor",
        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