Tag: autofixture

AutoFixture:PropertyData和异构参数

鉴于以下测试: [Theory] [PropertyData(“GetValidInputForDb”)] public void GivenValidInputShouldOutputCorrectResult( string patientId , string patientFirstName ) { var fixture = new Fixture(); var sut = fixture.Create(); sut.DoSomething(); // More code } 我想将夹具创建封装在自己的类中,类似于: [Theory] [CustomPropertyData(“GetValidInputForDb”)] public void GivenValidInputShouldOutputCorrectResult( string patientId , string patientFirstName , HtmlOutputBuilder sut ) { sut.DoSomething(); // More code } 问题是我正在使用PropertyData而后者正在提供两个输入参数。 事实上,我正在尝试自动创建我的夹具作为参数导致exception。 这是CustomPropertyData: public class CustomPropertyDataAttribute : […]

AutoFoture与AutoMoq和具体对象注入

我遇到了一个与AutoFixture和AutoMoqCustomization相关的奇怪问题,以及它如何处理具体类的自动锁定。 我怀疑我没有很好地使用它,但想知道问题是什么。 首先是她的一些背景。 假设我有一个我想测试的课程: public class IdentityApplicationService { public IdentityApplicationService( TenantProvisioningService tenantProvisioningService) { // guard clause etc. _tenantProvisioningService = tenantProvisioningService; } } 及其依赖类TenantProvisioningService (TenantProvisioningService的依赖项在这里不相关,因为它们将被自动模拟,我不关心我的测试): public class TenantProvisioningService { readonly IRoleRepository _roleRepository; readonly ITenantRepository _tenantRepository; readonly IUserRepository _userRepository; public TenantProvisioningService( ITenantRepository tenantRepository, IUserRepository userRepository, IRoleRepository roleRepository) { this._roleRepository = roleRepository; this._tenantRepository = tenantRepository; this._userRepository = userRepository; […]

如何让Autofixture创建一个包含接口类型属性的类型的实例?

我有这样一堂课: public class ViewModel { public IPagination List { get; set; } // interface! public SearchFilter SearchFilter { get; set; } public string Test { get; set; } } public class SearchFilter { public string Name { get; set; } } 应在IPagination接口周围创建动态代理,代理应填充测试数据。 现在可以让AutoFixture创建一个ViewModel类型的实例吗? 请注意,我只知道运行时的类型( typeof(ViewModel) )。 到现在为止我知道我可以这样做: var context = new SpecimenContext(fixture.Compose()); var value = […]

AutoFixture.AutoMoq为一个构造函数参数提供已知值

我刚开始在我的unit testing中使用AutoFixture.AutoMoq ,我发现它对于创建我不关心特定值的对象非常有帮助。 毕竟,匿名对象创建就是它的全部。 我正在努力的是当我关心一个或多个构造函数参数时。 以下面的ExampleComponent : public class ExampleComponent { public ExampleComponent(IService service, string someValue) { } } 我想编写一个测试,其中我为someValue提供了一个特定的值,但是由AutoFixture.AutoMoq自动创建IService 。 我知道如何在我的IFixture上使用Freeze来保持一个已注入组件的已知值,但我不太明白如何提供我自己的已知值。 这是我理想的做法: [TestMethod] public void Create_ExampleComponent_With_Known_SomeValue() { // create a fixture that supports automocking IFixture fixture = new Fixture().Customize(new AutoMoqCustomization()); // supply a known value for someValue (this method doesn’t exist) string knownValue = […]

AutoFixture可以在对象创建时执行委托吗?

我正在寻找自定义AutoFixture的创建时行为,这样我可以在生成和分配夹具的属性后设置一些依赖对象。 例如,假设我有一个自定义User的方法,因为对于某组测试,其IsDeleted属性始终必须为false: public class User { public int Id { get; set; } public string Name { get; set; } public bool IsDeleted { get; set; } } public static ObjectBuilder BuildUser(this Fixture f) { return f.Build().With(u => u.IsDeleted, false); } (我将ObjectBuilder交回测试,以便在必要时可以进一步自定义夹具。) 我想要做的是在创建时自动将该用户与其匿名集合关联,但我不能这样做,因为当我将返回值返回给用户时,我还没有生成Idunit testing正确。 这是我正在尝试做的事情: public static ObjectBuilder BuildUserIn(this Fixture f, UserCollection uc) { return […]

如何使用AutoFixture实现日期限制?

我目前正在拥有一个包含多个属性的模型类。 简化模型可能如下所示: public class SomeClass { public DateTime ValidFrom { get; set; } public DateTime ExpirationDate { get; set; } } 现在,我正在使用NUnit实现一些unit testing,并使用AutoFixture创建一些随机数据: [Test] public void SomeTest() { var fixture = new Fixture(); var someRandom = fixture.Create(); } 这到目前为止完美无缺。 但是要求ValidFrom的日期总是在 ExpirationDate 之前 。 我必须确保这一点,因为我正在实施一些积极的测试。 那么使用AutoFixture有一种简单的方法来实现它吗? 我知道我可以创建一个修复日期并添加一个随机日期间隔来解决这个问题,但如果AutoFixture可以自己处理这个要求,那将会很棒。 我没有很多使用AutoFixture的经验,但我知道我可以通过调用Build方法获得一个ICustomizationComposer : var fixture = new Fixture(); var someRandom […]

在AutoFixture中创建复杂子项时使用父属性的值

我正在使用AutoFixture为涉及父对象和复杂子对象的结构生成数据,如下所示: public class Parent { public int Id { get; set; } public string Name { get; set; } public Child[] Children { get; set; } } public class Child { public string Name { get; set; } public int ParentId { get; set; } } 有没有办法自动将生成的Child对象的属性ParentId设置为分配给父对象的id? 现在我的解决方案看起来像这样,这不是很漂亮: var parent = fixture.Build().Without(p => p.Children).CreateAnonymous(); parent.Children […]

使用种子属性自定义AutoFixture构建器

我有一个定制的自动混合构建器用于集成测试。 代码如下。 问题1 – 目前第一个事务的TransactionViewKey.TransactionId为1,等等。如何设置TransactionViewKey TransactionId,使其从方法param beginTransactionId中播种? 例如,返回第一个TransactionId为200的TransactionViews数组,然后每个递增1? 问题2 – 用于确定transactiondate的lambda似乎只运行一次 – 所以每个日期都是相同的值。 如何设置构建器,以便为每个生成的实例运行随机日期生成器而不是仅运行一次? 谢谢 static TransactionView[] CreateTransactions(int transactionsToReturnCount, long beginningTransactionId) { Random random = new Random(); IFixture fixture = new Fixture(); fixture.Customize(ob => ob .With(t => t.TransactionId) .With(t => t.TransactionIdSpecified, true) .OmitAutoProperties() ); fixture.Customize(ob => ob .With(t => t.TransactionDate, DateTime.Now – new TimeSpan(random.Next(30),0,0,0)) .With(t […]

轻松指定单个构造函数参数的值?

在Autofixture中是否有一些简单的方法来使用它的构造函数来创建对象,但硬编码/指定用于构造函数中的单个参数的值? 我看到这可以通过属性来完成,使用类似于: fixture.Build().With(x=x.Val,”hard coded value”).Create()

AutoFixture无法创建CreateAnonymous MVC Controller

代码: IFixture fixture = new Fixture().Customize(new AutoMoqCustomization()); fixture.Customize(c => c.Without(x => x.ModelMetadata)); var target = fixture.CreateAnonymous(); 例外: System.Reflection.TargetInvocationException:System.Reflection.TargetInvocationException:调用目标已抛出exception。 —> System.NotImplementedException:未实现方法或操作。 MyController()有3个参数。 我已经尝试了答案中描述的修复,但它不起作用。