Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,139 +1,162 @@
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<ISpecimenContext>().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<NoSpecimen>(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<NoSpecimen>(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<NoSpecimen>(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<NoSpecimen>(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<OmitSpecimen>(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<OmitSpecimen>(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<ISpecimenContext>().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<NoSpecimen>(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<NoSpecimen>(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.NotNull(notVirtualPropertyInfo.GetGetMethod());
Assert.IsType<NoSpecimen>(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.NotNull(virtualPropertyInfo.GetGetMethod());
Assert.Same(reflectedType, builder.ReflectedType);
Assert.IsType<NoSpecimen>(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.NotNull(virtualPropertyInfo.GetGetMethod());
Assert.IsType<OmitSpecimen>(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.Null(propertyInfo.GetGetMethod());
Assert.IsType<NoSpecimen>(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.NotNull(virtualPropertyInfo.GetGetMethod());
Assert.IsType<OmitSpecimen>(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 that GetGetMethod() returns null when getter is non-public.")]
public virtual object VirtualPropertyWithPrivateGetter { private get; set; }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
Loading