From 6b6826742df1649fdf520e7e692166d8adf6a514 Mon Sep 17 00:00:00 2001 From: Piotr Zajac Date: Sun, 19 Apr 2026 18:17:46 +0200 Subject: [PATCH 1/2] fix(codeql): Fix CodeQL issues --- .../Requests/ValuesRequestTests.cs | 4 +- ...gnoreVirtualMembersSpecimenBuilderTests.cs | 296 ++++++++++-------- .../IgnoreVirtualMembersSpecimenBuilder.cs | 2 +- 3 files changed, 160 insertions(+), 142 deletions(-) diff --git a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/Requests/ValuesRequestTests.cs b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/Requests/ValuesRequestTests.cs index c878f078..0f1b75c3 100644 --- a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/Requests/ValuesRequestTests.cs +++ b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/Requests/ValuesRequestTests.cs @@ -88,8 +88,8 @@ public void GivenDifferentTypeArguments_WhenConstructorIsInvoked_ThenParametersA Assert.Equal(values, attribute.Values); } - [Fact(DisplayName = "GIVEN valid arguments WHEN ToString is invoked THEN text conteins necessary information")] - public void GivenValidArguments_WhenToStringIsInvoked_ThenTextConteinsNecessaryInformation() + [Fact(DisplayName = "GIVEN valid arguments WHEN ToString is invoked THEN text contains necessary information")] + public void GivenValidArguments_WhenToStringIsInvoked_ThenTextContainsNecessaryInformation() { // Arrange var type = typeof(float); diff --git a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs index ffd15730..52b64269 100644 --- a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs +++ b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs @@ -1,139 +1,157 @@ -namespace Objectivity.AutoFixture.XUnit2.Core.Tests.SpecimenBuilders -{ - using System; - using System.Diagnostics.CodeAnalysis; - using global::AutoFixture.Kernel; - using global::AutoFixture.Xunit2; - using Moq; - - using Objectivity.AutoFixture.XUnit2.Core.SpecimenBuilders; - - using Xunit; - - [Collection("IgnoreVirtualMembersSpecimenBuilder")] - [Trait("Category", "SpecimenBuilders")] - public class IgnoreVirtualMembersSpecimenBuilderTests - { - private readonly ISpecimenContext context = new Mock().Object; - - [Fact(DisplayName = "GIVEN default constructor WHEN invoked THEN reflected type should be null")] - public void GivenDefaultConstructor_WhenInvoked_ThenReflectedTypeShouldBeNull() - { - // Arrange - // Act - var builder = new IgnoreVirtualMembersSpecimenBuilder(); - - // Assert - Assert.Null(builder.ReflectedType); - } - - [AutoData] - [Theory(DisplayName = "GIVEN existing type WHEN constructor with parameter is invoked THEN that type should be reflected")] - public void GivenExistingType_WhenConstructorWithParameterIsInvoked_ThenThatTypeShouldBeReflected(Type reflectedType) - { - // Arrange - // Act - var builder = new IgnoreVirtualMembersSpecimenBuilder(reflectedType); - - // Assert - Assert.Same(reflectedType, builder.ReflectedType); - } - - [AutoData] - [Theory(DisplayName = "GIVEN uninitialized request WHEN Create is invoked THEN NoSpecimen is returned")] - public void GivenUninitializedRequest_WhenCreateInvoked_ThenNoSpecimenInstance( - [Modest] IgnoreVirtualMembersSpecimenBuilder builder) - { - // Arrange - // Act - var specimen = builder.Create(null, this.context); - - // Assert - Assert.IsType(specimen); - } - - [AutoData] - [Theory(DisplayName = "GIVEN not PropertyInfo request WHEN Create is invoked THEN NoSpecimen is returned")] - public void GivenNotPropertyInfoRequest_WhenCreateInvoked_ThenNoSpecimenInstance( - [Modest] IgnoreVirtualMembersSpecimenBuilder builder) - { - // Arrange - // Act - var specimen = builder.Create(new object(), this.context); - - // Assert - Assert.IsType(specimen); - } - - [AutoData] - [Theory(DisplayName = "GIVEN not virtual PropertyInfo request WHEN Create is invoked THEN NoSpecimen is returned")] - public void GivenNotVirtualPropertyInfoRequest_WhenCreateInvoked_ThenNoSpecimenInstance( - [Modest] IgnoreVirtualMembersSpecimenBuilder builder) - { - // Arrange - var notVirtualPropertyInfo = typeof(FakeObject).GetProperty(nameof(FakeObject.NotVirtualProperty)); - - // Act - var specimen = builder.Create(notVirtualPropertyInfo, this.context); - - // Assert - Assert.IsType(specimen); - } - - [AutoData] - [Theory(DisplayName = "GIVEN virtual PropertyInfo request but hosted in different type WHEN Create is invoked THEN NoSpecimen is returned")] - public void GivenVirtualPropertyInfoRequestHostedInDifferentType_WhenCreateInvoked_ThenNoSpecimenInstance( - [Frozen] Type reflectedType, - [Greedy] IgnoreVirtualMembersSpecimenBuilder builder) - { - // Arrange - var virtualPropertyInfo = typeof(FakeObject).GetProperty(nameof(FakeObject.VirtualProperty)); - - // Act - var specimen = builder.Create(virtualPropertyInfo, this.context); - - // Assert - Assert.Same(reflectedType, builder.ReflectedType); - Assert.IsType(specimen); - } - - [AutoData] - [Theory(DisplayName = "GIVEN virtual PropertyInfo request WHEN Create is invoked THEN OmitSpecimen is returned")] - public void GivenVirtualPropertyInfoRequest_WhenCreateInvoked_ThenOmitSpecimenInstance( - [Modest] IgnoreVirtualMembersSpecimenBuilder builder) - { - // Arrange - var virtualPropertyInfo = typeof(FakeObject).GetProperty(nameof(FakeObject.VirtualProperty)); - - // Act - var specimen = builder.Create(virtualPropertyInfo, this.context); - - // Assert - Assert.IsType(specimen); - } - - [Fact(DisplayName = "GIVEN virtual PropertyInfo request hosted in appropriate type WHEN Create is invoked THEN OmitSpecimen is returned")] - public void GivenVirtualPropertyInfoRequestHostedInAppropriateType_WhenCreateInvoked_ThenOmitSpecimenInstance() - { - // Arrange - var reflectedType = typeof(FakeObject); - var builder = new IgnoreVirtualMembersSpecimenBuilder(reflectedType); - var virtualPropertyInfo = reflectedType.GetProperty(nameof(FakeObject.VirtualProperty)); - - // Act - var specimen = builder.Create(virtualPropertyInfo, this.context); - - // Assert - Assert.IsType(specimen); - } - - [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Design required by tests.")] - [SuppressMessage("ReSharper", "All", Justification = "Design required by tests.")] - protected class FakeObject - { - public object NotVirtualProperty { get; set; } - - public virtual object VirtualProperty { get; set; } - } - } -} +namespace Objectivity.AutoFixture.XUnit2.Core.Tests.SpecimenBuilders +{ + using System; + using System.Diagnostics.CodeAnalysis; + using global::AutoFixture.Kernel; + using global::AutoFixture.Xunit2; + using Moq; + + using Objectivity.AutoFixture.XUnit2.Core.SpecimenBuilders; + + using Xunit; + + [Collection("IgnoreVirtualMembersSpecimenBuilder")] + [Trait("Category", "SpecimenBuilders")] + public class IgnoreVirtualMembersSpecimenBuilderTests + { + private readonly ISpecimenContext context = new Mock().Object; + + [Fact(DisplayName = "GIVEN default constructor WHEN invoked THEN reflected type should be null")] + public void GivenDefaultConstructor_WhenInvoked_ThenReflectedTypeShouldBeNull() + { + // Arrange + // Act + var builder = new IgnoreVirtualMembersSpecimenBuilder(); + + // Assert + Assert.Null(builder.ReflectedType); + } + + [AutoData] + [Theory(DisplayName = "GIVEN existing type WHEN constructor with parameter is invoked THEN that type should be reflected")] + public void GivenExistingType_WhenConstructorWithParameterIsInvoked_ThenThatTypeShouldBeReflected(Type reflectedType) + { + // Arrange + // Act + var builder = new IgnoreVirtualMembersSpecimenBuilder(reflectedType); + + // Assert + Assert.Same(reflectedType, builder.ReflectedType); + } + + [AutoData] + [Theory(DisplayName = "GIVEN uninitialized request WHEN Create is invoked THEN NoSpecimen is returned")] + public void GivenUninitializedRequest_WhenCreateInvoked_ThenNoSpecimenInstance( + [Modest] IgnoreVirtualMembersSpecimenBuilder builder) + { + // Arrange + // Act + var specimen = builder.Create(null, this.context); + + // Assert + Assert.IsType(specimen); + } + + [AutoData] + [Theory(DisplayName = "GIVEN not PropertyInfo request WHEN Create is invoked THEN NoSpecimen is returned")] + public void GivenNotPropertyInfoRequest_WhenCreateInvoked_ThenNoSpecimenInstance( + [Modest] IgnoreVirtualMembersSpecimenBuilder builder) + { + // Arrange + // Act + var specimen = builder.Create(new object(), this.context); + + // Assert + Assert.IsType(specimen); + } + + [AutoData] + [Theory(DisplayName = "GIVEN not virtual PropertyInfo request WHEN Create is invoked THEN NoSpecimen is returned")] + public void GivenNotVirtualPropertyInfoRequest_WhenCreateInvoked_ThenNoSpecimenInstance( + [Modest] IgnoreVirtualMembersSpecimenBuilder builder) + { + // Arrange + var notVirtualPropertyInfo = typeof(FakeObject).GetProperty(nameof(FakeObject.NotVirtualProperty)); + + // Act + var specimen = builder.Create(notVirtualPropertyInfo, this.context); + + // Assert + Assert.IsType(specimen); + } + + [AutoData] + [Theory(DisplayName = "GIVEN virtual PropertyInfo request but hosted in different type WHEN Create is invoked THEN NoSpecimen is returned")] + public void GivenVirtualPropertyInfoRequestHostedInDifferentType_WhenCreateInvoked_ThenNoSpecimenInstance( + [Frozen] Type reflectedType, + [Greedy] IgnoreVirtualMembersSpecimenBuilder builder) + { + // Arrange + var virtualPropertyInfo = typeof(FakeObject).GetProperty(nameof(FakeObject.VirtualProperty)); + + // Act + var specimen = builder.Create(virtualPropertyInfo, this.context); + + // Assert + Assert.Same(reflectedType, builder.ReflectedType); + Assert.IsType(specimen); + } + + [AutoData] + [Theory(DisplayName = "GIVEN virtual PropertyInfo request WHEN Create is invoked THEN OmitSpecimen is returned")] + public void GivenVirtualPropertyInfoRequest_WhenCreateInvoked_ThenOmitSpecimenInstance( + [Modest] IgnoreVirtualMembersSpecimenBuilder builder) + { + // Arrange + var virtualPropertyInfo = typeof(FakeObject).GetProperty(nameof(FakeObject.VirtualProperty)); + + // Act + var specimen = builder.Create(virtualPropertyInfo, this.context); + + // Assert + Assert.IsType(specimen); + } + + [AutoData] + [Theory(DisplayName = "GIVEN virtual PropertyInfo with private getter WHEN Create is invoked THEN NoSpecimen is returned")] + public void GivenVirtualPropertyInfoWithPrivateGetter_WhenCreateInvoked_ThenNoSpecimenInstance( + [Modest] IgnoreVirtualMembersSpecimenBuilder builder) + { + // Arrange + var propertyInfo = typeof(FakeObject).GetProperty(nameof(FakeObject.VirtualPropertyWithPrivateGetter)); + + // Act + var specimen = builder.Create(propertyInfo, this.context); + + // Assert + Assert.IsType(specimen); + } + + [Fact(DisplayName = "GIVEN virtual PropertyInfo request hosted in appropriate type WHEN Create is invoked THEN OmitSpecimen is returned")] + public void GivenVirtualPropertyInfoRequestHostedInAppropriateType_WhenCreateInvoked_ThenOmitSpecimenInstance() + { + // Arrange + var reflectedType = typeof(FakeObject); + var builder = new IgnoreVirtualMembersSpecimenBuilder(reflectedType); + var virtualPropertyInfo = reflectedType.GetProperty(nameof(FakeObject.VirtualProperty)); + + // Act + var specimen = builder.Create(virtualPropertyInfo, this.context); + + // Assert + Assert.IsType(specimen); + } + + [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Design required by tests.")] + [SuppressMessage("ReSharper", "All", Justification = "Design required by tests.")] + protected class FakeObject + { + public object NotVirtualProperty { get; set; } + + public virtual object VirtualProperty { get; set; } + + [SuppressMessage("Design", "CA1044:Properties should not be write only", Justification = "Required to test null getter scenario.")] + public virtual object VirtualPropertyWithPrivateGetter { private get; set; } + } + } +} diff --git a/src/Objectivity.AutoFixture.XUnit2.Core/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilder.cs b/src/Objectivity.AutoFixture.XUnit2.Core/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilder.cs index 63c28ae0..3c74d82a 100644 --- a/src/Objectivity.AutoFixture.XUnit2.Core/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilder.cs +++ b/src/Objectivity.AutoFixture.XUnit2.Core/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilder.cs @@ -23,7 +23,7 @@ public object Create(object request, ISpecimenContext context) if (request is PropertyInfo pi //// is a property && (this.ReflectedType is null //// is hosted anywhere || this.ReflectedType == pi.ReflectedType) //// is hosted in defined type - && pi.GetGetMethod().IsVirtual) + && pi.GetGetMethod() is { IsVirtual: true }) { return new OmitSpecimen(); } From d0a7a0487e901e4848d3eddc2af27ebb3dd8924e Mon Sep 17 00:00:00 2001 From: Piotr Zajac Date: Sun, 19 Apr 2026 18:37:00 +0200 Subject: [PATCH 2/2] fix(codeql): Add additional guards to tests --- .../IgnoreVirtualMembersSpecimenBuilderTests.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs index 52b64269..1992300c 100644 --- a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs +++ b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/SpecimenBuilders/IgnoreVirtualMembersSpecimenBuilderTests.cs @@ -77,6 +77,7 @@ public void GivenNotVirtualPropertyInfoRequest_WhenCreateInvoked_ThenNoSpecimenI var specimen = builder.Create(notVirtualPropertyInfo, this.context); // Assert + Assert.NotNull(notVirtualPropertyInfo.GetGetMethod()); Assert.IsType(specimen); } @@ -93,6 +94,7 @@ public void GivenVirtualPropertyInfoRequestHostedInDifferentType_WhenCreateInvok var specimen = builder.Create(virtualPropertyInfo, this.context); // Assert + Assert.NotNull(virtualPropertyInfo.GetGetMethod()); Assert.Same(reflectedType, builder.ReflectedType); Assert.IsType(specimen); } @@ -109,6 +111,7 @@ public void GivenVirtualPropertyInfoRequest_WhenCreateInvoked_ThenOmitSpecimenIn var specimen = builder.Create(virtualPropertyInfo, this.context); // Assert + Assert.NotNull(virtualPropertyInfo.GetGetMethod()); Assert.IsType(specimen); } @@ -124,6 +127,7 @@ public void GivenVirtualPropertyInfoWithPrivateGetter_WhenCreateInvoked_ThenNoSp var specimen = builder.Create(propertyInfo, this.context); // Assert + Assert.Null(propertyInfo.GetGetMethod()); Assert.IsType(specimen); } @@ -139,6 +143,7 @@ public void GivenVirtualPropertyInfoRequestHostedInAppropriateType_WhenCreateInv var specimen = builder.Create(virtualPropertyInfo, this.context); // Assert + Assert.NotNull(virtualPropertyInfo.GetGetMethod()); Assert.IsType(specimen); } @@ -150,7 +155,7 @@ protected class FakeObject public virtual object VirtualProperty { get; set; } - [SuppressMessage("Design", "CA1044:Properties should not be write only", Justification = "Required to test null getter scenario.")] + [SuppressMessage("Design", "CA1044:Properties should not be write only", Justification = "Required to test that GetGetMethod() returns null when getter is non-public.")] public virtual object VirtualPropertyWithPrivateGetter { private get; set; } } }