我在现有项目上创建了一些单元测试。我正在使用 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);
}
我打算发送多个内联数据,我可以在其中设置一些类属性的值来测试我正在寻找的行为。
有人可以告诉我可能出了什么问题。
谢谢你。