Skip to content

Inconclusive specs when using a behavior with a generic type parameter #361

@SimonLissack

Description

@SimonLissack

Resharper version: 2017.3
Visual Studio version: 2017/2015
MSpec runner version: 2.0.2

I've come across an issue with the plugin when using a behavior which has a generic type parameter. When the behaviors are run, the result of it is "Inconclusive: Test not run"

As far as I can tell this is tied to the plugin and not MSpec itself, I've tested it using the command line MSpec runner and the tests fail/succeed as expected.

Repro of the issue:

Nuget versions:
Machine.Specifications v0.12.0 (latest)
Machine.Specifications.Should v0.11.0 (latest)

using Machine.Specifications;

namespace MSpecBehaviorRepro
{
    public class BehaviorTest
    {
        public class when_using_behaviors
        {
            Establish context = () =>
            {
                _testClass = new ConcreteClass
                {
                    AssertionValue = "Hello world!"
                };
            };

            Behaves_like<NormalBehavior> normal_behavior;
            Behaves_like<GenericBehavior<ConcreteClass>> generic_behavior;
            Behaves_like<GenericBehavior<AbstractClass>> failing_generic_behavior;
        }

        static AbstractClass _testClass;

        [Behaviors]
        public class NormalBehavior
        {
            It should_have_an_assertion = () => _testClass.AssertionValue.ShouldEqual("Hello world!");
        }

        [Behaviors]
        public class GenericBehavior<T> where T : AbstractClass
        {
            It should_have_an_assertion = () => _testClass.AssertionValue.ShouldEqual("Hello world!");
            It should_be_the_correct_type = () => TestHelper.GetTypeName<T>().ShouldEqual(_testClass.GetType().Name);
        }

        public abstract class AbstractClass
        {
            public string AssertionValue { get; set; }
        }

        public class ConcreteClass : AbstractClass
        {
        }

        static class TestHelper
        {
            public static string GetTypeName<T>()
            {
                return typeof(T).Name;
            }
        }
    }
}

From visual studio:
image

When using the MSpec command line runner (failing as expected):
image

Verbose logs from the runner:

2018.04.17 12:18:36.617    INFO BuildStage started
2018.04.17 12:18:36.617    INFO Build policy: Automatic
2018.04.17 12:18:36.941    INFO 1 projects built
2018.04.17 12:18:36.941 VERBOSE     MSpecBehaviorRepro
2018.04.17 12:18:36.941    INFO BuildStage completed
2018.04.17 12:18:36.946    INFO RefreshProjectPropertiesStage started
2018.04.17 12:18:36.947    INFO RefreshProjectPropertiesStage completed
2018.04.17 12:18:36.948    INFO DiscoveryStage started
2018.04.17 12:18:36.948    INFO Test exploration required for 1 projects
2018.04.17 12:18:36.948 VERBOSE     MSpecBehaviorRepro
2018.04.17 12:18:36.972    INFO DiscoveryStage completed
2018.04.17 12:18:36.972    INFO BuildPipelineStage started
2018.04.17 12:18:36.972    INFO BuildPipelineStage completed
2018.04.17 12:18:36.972    INFO ApplyRulesStage started
2018.04.17 12:18:36.973    INFO Got 9 elements (0 explicit) to run
2018.04.17 12:18:36.973 VERBOSE Marking 9 elements as Pending
2018.04.17 12:18:36.974 VERBOSE Marking elements as Pending completed
2018.04.17 12:18:36.974 VERBOSE Distributing 9 elements into runs
2018.04.17 12:18:36.975 VERBOSE Distributing elements completed
2018.04.17 12:18:36.976    INFO Created 1 unit-test runs
2018.04.17 12:18:36.976    INFO ApplyRulesStage completed
2018.04.17 12:18:36.976    INFO RunTestsStage started
2018.04.17 12:18:36.976 VERBOSE Running up to 1 unit-test runs in parallel
2018.04.17 12:18:36.981    INFO Run: 902cc529-bdfe-415c-9f9c-5f113c8b5c59 - Started
2018.04.17 12:18:36.981 VERBOSE     Provider: Machine.Specifications
    Project: None
    Target Framework: .NETFramework,Version=v4.5.2
    Strategy: Machine.Specifications.ReSharperProvider.RunStrategies.MspecOutOfProcessUnitTestRunStrategy
    Runtime Enviroment:
        Platform Type: x64
        Platform Version: v4_5
2018.04.17 12:18:36.982    INFO Starting process: C:\Users\simon.lissack\AppData\Local\JetBrains\Installations\ReSharperPlatformVs15_1cd52f3e_000\JetBrains.ReSharper.TaskRunner.CLR45.x64.exe "127.0.0.1" "22775" "902cc529-bdfe-415c-9f9c-5f113c8b5c59"
2018.04.17 12:18:36.986    INFO Started process with pid 6940
2018.04.17 12:18:37.624    WARN Run: 902cc529-bdfe-415c-9f9c-5f113c8b5c59 - Cannot find element for task <e545ac96-c38c-40e2-be7c-cf95edf89297> of type <MspecTestAssemblyTask>
2018.04.17 12:18:37.984    INFO Process C:\Users\simon.lissack\AppData\Local\JetBrains\Installations\ReSharperPlatformVs15_1cd52f3e_000\JetBrains.ReSharper.TaskRunner.CLR45.x64.exe:6940 has exited
2018.04.17 12:18:37.984    INFO Run: 902cc529-bdfe-415c-9f9c-5f113c8b5c59 - Completed
2018.04.17 12:18:37.984    INFO RunTestsStage completed
2018.04.17 12:18:37.985    INFO Finishing run
2018.04.17 12:18:37.985    WARN Element MSpecBehaviorRepro.BehaviorTest+when_using_behaviors.generic_behavior.MSpecBehaviorRepro.BehaviorTest+GenericBehavior`1.should_be_the_correct_type was left pending after its run completion.
2018.04.17 12:18:37.985    WARN Element MSpecBehaviorRepro.BehaviorTest+when_using_behaviors.generic_behavior.MSpecBehaviorRepro.BehaviorTest+GenericBehavior`1.should_have_an_assertion was left pending after its run completion.
2018.04.17 12:18:37.985    WARN Element MSpecBehaviorRepro.BehaviorTest+when_using_behaviors.failing_generic_behavior.MSpecBehaviorRepro.BehaviorTest+GenericBehavior`1.should_be_the_correct_type was left pending after its run completion.
2018.04.17 12:18:37.985    WARN Element MSpecBehaviorRepro.BehaviorTest+when_using_behaviors.failing_generic_behavior.MSpecBehaviorRepro.BehaviorTest+GenericBehavior`1.should_have_an_assertion was left pending after its run completion.
2018.04.17 12:18:37.986    INFO Run is finished

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions