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; }
}
}