问题标签 [autofixture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xunit - 具有“弱”类型的 AutoFixture
我喜欢AutoFixture,但遇到了一些非常重复的“排列”代码,我觉得它应该能够处理 - 不知何故。
这是我的场景,使用Castle Dynamic ProxyIInterceptor
的实现进行说明。
首先是被测系统:
现在进行一些利用xUnit数据理论支持的简单测试:
实际上,我的CustomAutoData
属性确实自定义了 AutoFixture 以便注入的实例IInvocation
大部分配置正确,但是由于每个IInterceptor
实现都期望Proxy
和ReturnValue
属性的类型完全不同,因此每个测试都必须自己设置它们。(因此Mock.Get(context).Setup(...)
调用。)
这没关系,除了每个测试InterceptorATests
必须重复相同的几行排列,以及InterceptorBTests
.
有没有办法干净地删除重复Mock.Get(...)
调用?有没有一种好方法可以访问IFixture
给定测试类的实例?
integration-testing - 在我的数据集成测试中使用 autofixture 创建代理
我正在尝试为使用实体框架的域编写一套数据库集成测试。我更喜欢在某些情况下自动固定对象。我理想的语法是这样的
显然,这是行不通的,因为CreateAnonymous()
不期望工厂的输入参数。我只能假设我对FromFactory()
提供的内容有一个错误的理解。虽然评论说,
在阅读了 ploehs 博客之后,我对这些作品如何相互作用感到有些困惑。
工厂调用期间的实例MyDbContext
不是我传递给的实例Inject()
autofixture - 具有派生类型的 AutoFixture
在我使用 AutoFixture 之前的日子里,我可能已经做了以下安排来设置一个名为的服务的单元测试CustomerService
:
这种冗长的安排似乎是 AutoFixture 擅长解决的问题。我想我可以使用 AutoFixture 重写该安排也看起来像这样:
我的问题是,有没有办法配置 AutoFixture 来为我执行此操作,因为我有许多派生HttpResponse
类型要从测试方法换成测试方法?
autofixture - AutoFixture : 将参数传递给样本生成器
(我没有找到这样做的方法,从源代码看来它不受支持,但我可能忽略了它)
我想做类似的事情:
所以这是 AutoFixture 中已经存在的类似种子习语的变体,但种子习语是非常硬编码的(或者我认为如此)。
问题:是否可以自定义夹具以接受样本的参数?
到目前为止,我最好的想法是构建一个包含结果对象的特殊规范类,以便您可以执行以下操作:
这样我就可以注册CircleSpecificationSpecimenBuilder
可以使用的:
请注意,要使用带有种子重载的 CreateAnonymous 种子参数类型必须匹配方法返回类型。
unit-testing - 为什么 AutoFixture 自定义会导致继承的属性不被填充?
我编写了以下自定义,并将其作为组合的一部分应用于我的大多数测试。我的实体有一个只读 Id,但我在此自定义中使用他们的 SetId 方法来确保所有实体都有一些 Id,如果它们是临时的(还没有 Id)。
这一直很好,直到我今天发现了一件非常奇怪的事情。如果我提供一个直接从 BaseEntity 继承的实体的测试,那么一切都很好,并且它的可写属性是自动填充的。但是,如果我要求从 BaseEntity 更远的东西继承的实体,我的自定义会阻止属性自动填充。
此测试方法中的 User 实体已正确填充:
但是,以下测试中的 AwesomeUser 实体没有自动填充任何相同的属性。
在这两个测试用例中,由于我的自定义,Id 属性是自动填充的。如果我删除我的自定义,SomeOtherTest 的 AwesomeUser 实例会自动填充其继承的属性。我必须假设我的定制是什么搞砸了。
有没有更好的方法让我的所有 BaseEntity 实例设置它们的 ID,或者 AutoFixture 还缺少什么?我首先、中间和最后应用了我的自定义,但无济于事。
moq - AutoFixture:模拟方法不返回冻结的实例
我正在尝试编写这个简单的测试:
Verify
检查失败。
postProcessor.Process 的代码是
postProcessingActionReader
是通过构造函数初始化的接口字段。
我期待测试通过,但它失败了,结果证明IPostProessingAction
从CreatePostProcessingActionFromJobResultXml
方法返回的实例与从fixture.Freeze<>
.
我的期望是,在冻结这个 Mock 对象后,它将IPostProcessingAction
在所需的每个地方注入接口的底层模拟,并使所有返回的模拟方法返回IPostProcessingAction
相同的对象。
我对模拟方法的返回值的期望不正确吗?有没有办法改变这种行为,以便模拟方法返回相同的冻结实例?
c# - AutoFixture 无法创建匿名 MVC 控制器
编码:
例外:
System.Reflection.TargetInvocationException:System.Reflection.TargetInvocationException:调用的目标已引发异常。---> System.NotImplementedException:方法或操作未实现。
MyController()
接受 3 个参数。
我已经尝试了此处答案中描述的修复程序,但它不起作用。
c# - Frozen mock 的属性被覆盖
我遇到了一个问题,AutoFixture 似乎正在覆盖冻结模拟上的属性。模拟类的属性是只读的,根据我的阅读,AutoFixture 不应该尝试对它做任何事情。
我在下面的 LINQPad 中包含了重现该问题的代码。Victim
是一个具有两个只读属性的普通测试类。问题在于,一旦我为Things
属性设置了期望并将模拟注册Object
为 AutoFixture 以返回该Victim
类型的实例,该集合将Things
包含不同的字符串。
要重现此问题,请在 LINQPad 中将以下代码作为C# 程序运行,并从 NuGet引用AutoFixture和Moq 。请务必包含命名空间Moq和Ploeh.AutoFixture。
我的期望是我应该取回我注册的对象,Register
并且Things
返回Victim
的集合应该返回我在调用SetupGet
.
autofixture - 无效构造函数参数的自动夹具测试
我有以下课程和测试。我想测试将 null 值作为参数传递给构造函数,并期待ArgumentNullException
. 但是因为我使用了 Autofixture 的CreateAnonymous
方法,所以我得到了一个TargetInvocationException
。
编写这些测试的正确方法是什么?
tdd - 找不到 autofixture 报告的循环引用
我正在尝试验证我的基础架构。AutoFixture 说我的代码中有一个循环引用,当我省略该行为时,它无法将样本转换为我的对象类型。
绘制解决方案依赖关系图不会产生循环引用。autofixture 的输出似乎给了我一个域对象指向域对象的路径。我不明白……它们很简单。
我会继续前进,因为我有一个通过的测试,但我真的很想确保我没有不需要的循环引用。我还担心,如果在此示例中没有构建我的简单域对象,我以后将无法将 AutoFixture 用于隔离组件。
这是成功的测试:
这是失败的测试:
这是客户端代理(单独的项目仅引用数据模型项目):
这是我启动的数据服务(服务在单独的项目中仅引用数据模型项目)
这是数据模型类(单独的项目,由所有其他项目引用):
这是模型项目中的数据库版本类:
这是我的数据服务项目中的 DatabaseVersionService.svc 文件(空 asp.net,从 iisexpress 编译、调试,并且 atom 或 json 是可浏览的):
这是删除 throwingrecursionbehavior 并添加 omitonrecursionbehavior 后的输出:
结果消息:System.InvalidCastException:无法将“Ploeh.AutoFixture.Kernel.OmitSpecimen”类型的对象转换为“skeletor.Domain.DatabaseVersion”类型。结果 StackTrace:
在 Ploeh.AutoFixture.Kernel.SpecimenFactory 1.Create2.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.NoSpecimenOutputGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.Postprocessor
(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c_ DisplayClass6.b _1(ISpecimenBuilder b) 在 System.Linq.Enumerable.WhereSelectListIterator2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2 .MoveNext() 在 System.Linq.Enumerable.d_a5 1 源) 在Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create1.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Kernel.FilteringSpecimenBuilder.Create(Object request, ISpecimenContext context)在 Ploeh.AutoFixture.Dsl.NodeComposer1.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.<Create>b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator
2.MoveNext() 在 System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a5
1.MoveNext() 在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 source) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Dsl.CompositeNodeComposer
1.Create(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Kernel.SpecimenContext。在 Ploeh.AutoFixture.Kernel.SpecimenFactory 处解析(对象请求) 1. 在 Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder 处2.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.NoSpecimenOutputGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.Postprocessor
创建(对象请求,ISpecimenContext 上下文)。<>c _DisplayClass6.b_ 1(ISpecimenBuilder b)在 System.Linq.Enumerable 处。 WhereSelectListIterator2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() 在 System.Linq.Enumerable.d _a51.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1 来源)在 Ploeh.AutoFixture.Kernel.FilteringSpecimenBuilder.Create(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Dsl.NodeComposer 的 Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context)1.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.<Create>b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator
2.MoveNext()在 System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a5
1.MoveNext() 在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 source) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Dsl.CompositeNodeComposer
1.在 Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous[T](ISpecimenContext context, T 种子) 在 Ploeh.AutoFixture.Kernel.SpecimenContext.Resolve(Object request) 在 Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous 处创建(对象请求,ISpecimenContext 上下文) [T](ISpecimenContext context) at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous[T](ISpecimenBuilderComposer composer) at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous[T](IPostprocessComposer`1 composer) at skeletor.AcceptanceTests.InfrstructureTests.DataServiceGetsDatabaseVersion() in d:\projects\skeletor\skeletor.AcceptanceTests\InfrstructureTests.cs:第 31 行