0

我在现有项目上创建了一些单元测试。我正在使用 AutoMoq 将数据注入到一些测试中。运行测试时,它抱怨递归错误。我使用以下代码解决了错误:

public sealed class AutoMoqDataAttribute : AutoDataAttribute
{
    public AutoMoqDataAttribute()
        : base(() => new Fixture().Customize(new DomainCustomization()))
    {
    }
}

public class OmitRecursionCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b =>
        fixture.Behaviors.Remove(b));
        fixture.Behaviors.Add(new OmitOnRecursionBehavior());
    }
}

public class DomainCustomization : CompositeCustomization
{
    public DomainCustomization()
        : base(
            new AutoMoqCustomization(),
            new SupportMutableValueTypesCustomization(),
            new OmitRecursionCustomization())
    {
    }
}

解决递归错误后,测试将无法运行。调试输出一直说线程已退出。然后我创建了一些示例类来测试我的设置并且它们都运行,除了现有的项目类测试。

我正在编写测试的一个类的示例是这样的:

public partial class BusinessContact
{
    public int BusinessContactId { get; set; }
    public int BusinessId { get; set; }
    public int ContactId { get; set; }
    public int? AddressId { get; set; }
    public int? EmailId { get; set; }
    public BusinessContactType.TypeID BusinessContactTypeId { get; set; }

    [Column(TypeName = "smalldatetime")]
    public DateTime DateLastModified { get; set; }

    [StringLength(450)]
    public string ModifiedByUserId { get; set; }

    [ForeignKey("AddressId")]
    [InverseProperty("BusinessContact")]
    public virtual Address Address { get; set; }

    [ForeignKey("BusinessId")]
    [InverseProperty("BusinessContact")]
    public virtual Business Business { get; set; }

    [ForeignKey("BusinessContactTypeId")]
    [InverseProperty("BusinessContact")]
    public virtual BusinessContactType BusinessContactType { get; set; }

    [ForeignKey("ContactId")]
    [InverseProperty("BusinessContact")]
    public virtual Contact Contact { get; set; }

    [ForeignKey("EmailId")]
    [InverseProperty("BusinessContact")]
    public virtual Email Email { get; set; }
}

上述类的示例测试是这样的:

    [Theory]
    [AutoMoqData]
    public void ValidateMandatoryField(BusinessContact _sut)
    {
        Assert.NotNull(_sut.BusinessId);
        Assert.True(_sut.BusinessId > 0);
    }

我打算发送多个内联数据,我可以在其中设置一些类属性的值来测试我正在寻找的行为。

有人可以告诉我可能出了什么问题。

谢谢你。

4

0 回答 0