SubSpec / test / SubSpec.Tests / Acceptance Tests / SpecificationDeclarations.cs

using System;
using Xunit;
using System.Xml;
using TestUtility;
using SubSpec;

public class SpecificationDeclarations : SubSpecAcceptanceTest
{
    private const string Usings = @" 
                using System;
                using Xunit;
				using SubSpec;";
    [Fact]
    public void StaticSpecificationOnStaticClass()
    {
        string code =
            Usings + @"

                public static class MockTestClass
                {
					[Specification]
					public static void Spec()
					{
						"""".Context(() => {} );
						"""".Assert(() => {});
					}
                }
            ";

        XmlNode assemblyNode = ExecuteSpecification( code );

        SubSpecResultUtility.VerifyPassed( assemblyNode.AssertionResults().First() );
    }

    [Fact]
    public void StaticSpecificationOnClass()
    {
        string code =
            Usings + @"

                public class MockTestClass
                {
					[Specification]
					public static void Spec()
					{
						"""".Context(() => {} );
						"""".Assert(() => {});
					}
                }
            ";

        XmlNode assemblyNode = ExecuteSpecification( code );

        SubSpecResultUtility.VerifyPassed( assemblyNode.AssertionResults().First() );
    }

    [Fact]
    public void SpecificationOnClassWithoutDefaultConstructorThrows()
    {
        string code =
            Usings + @"

                public class MockTestClass
                {
                    private MockTestClass(){}

					[Specification]
					public void Spec()
					{
						"""".Context(() => {} );
						"""".Assert(() => {});
					}
                }
            ";

        XmlNode assemblyNode = ExecuteSpecification( code );

        string expected = "System.InvalidOperationException : An exception was thrown while building tests from Specification MockTestClass.Spec:\r\nSystem.InvalidOperationException: Specification class does not have a default constructor";

        SubSpecResultUtility.VerifyFailedWith( assemblyNode.AssertionResults().First(), expected );
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.