public void should_use_unit_tag_if_propagate_tag_is_used([Values(null, "tag")] string tag)
    {
        var parameterInfo = typeof(Subject).GetMethod(nameof(Subject.Foo)) !.GetParameters().Single(_ => _.ParameterType == typeof(int));

        // --arrange
        var actual = A.Fake <IBuildSession>();

        A.CallTo(() => actual.BuildChain).Returns(Unit.Is(parameterInfo).Tag(tag).ToBuildChain());

        var target = new BuildArgumentByParameterName(SpecialTag.Propagate);

        // --act
        target.Process(actual);

        // --assert
        A.CallTo(() => actual.BuildUnit(Unit.Is(parameterInfo.Name).Tag(tag))).MustHaveHappenedOnceAndOnly();
    }
    public void should_return_result_of_build_unit([Values(null, "tag")] string tag)
    {
        const string expected = "expected";

        var parameterInfo = typeof(Subject).GetMethod(nameof(Subject.Foo)) !.GetParameters().Single(_ => _.ParameterType == typeof(int));

        // --arrange
        var actual = A.Fake <IBuildSession>();

        A.CallTo(() => actual.BuildChain).Returns(Unit.Is(parameterInfo).ToBuildChain());
        A.CallTo(() => actual.BuildUnit(Unit.Is(parameterInfo.Name).Tag(tag))).Returns(expected.ToBuildResult());

        var target = new BuildArgumentByParameterName(tag);

        // --act
        target.Process(actual);

        // --assert
        actual.BuildResult.Value.Should().Be(expected);
    }