问题标签 [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.

0 投票
2 回答
786 浏览

xunit - 具有“弱”类型的 AutoFixture

我喜欢AutoFixture,但遇到了一些非常重复的“排列”代码,我觉得它应该能够处理 - 不知何故。

这是我的场景,使用Castle Dynamic ProxyIInterceptor的实现进行说明。

首先是被测系统:

现在进行一些利用xUnit数据理论支持的简单测试:

实际上,我的CustomAutoData属性确实自定义了 AutoFixture 以便注入的实例IInvocation大部分配置正确,但是由于每个IInterceptor实现都期望ProxyReturnValue属性的类型完全不同,因此每个测试都必须自己设置它们。(因此Mock.Get(context).Setup(...)调用。)

这没关系,除了每个测试InterceptorATests必须重复相同的几行排列,以及InterceptorBTests.

有没有办法干净地删除重复Mock.Get(...)调用?有没有一种好方法可以访问IFixture给定测试类的实例?

0 投票
1 回答
847 浏览

integration-testing - 在我的数据集成测试中使用 autofixture 创建代理

我正在尝试为使用实体框架的域编写一套数据库集成测试。我更喜欢在某些情况下自动固定对象。我理想的语法是这样的

显然,这是行不通的,因为CreateAnonymous()不期望工厂的输入参数。我只能假设我对FromFactory()提供的内容有一个错误的理解。虽然评论说,

在阅读了 ploehs 博客之后,我对这些作品如何相互作用感到有些困惑。

工厂调用期间的实例MyDbContext不是我传递给的实例Inject()

0 投票
1 回答
469 浏览

autofixture - 具有派生类型的 AutoFixture

在我使用 AutoFixture 之前的日子里,我可能已经做了以下安排来设置一个名为的服务的单元测试CustomerService

这种冗长的安排似乎是 AutoFixture 擅长解决的问题。我想我可以使用 AutoFixture 重写该安排也看起来像这样:

我的问题是,有没有办法配置 AutoFixture 来为我执行此操作,因为我有许多派生HttpResponse类型要从测试方法换成测试方法?

0 投票
1 回答
1043 浏览

autofixture - AutoFixture : 将参数传递给样本生成器

(我没有找到这样做的方法,从源代码看来它不受支持,但我可能忽略了它)

我想做类似的事情:

所以这是 AutoFixture 中已经存在的类似种子习语的变体,但种子习语是非常硬编码的(或者我认为如此)。

问题:是否可以自定义夹具以接受样本的参数?

到目前为止,我最好的想法是构建一个包含结果对象的特殊规范类,以便您可以执行以下操作:

这样我就可以注册CircleSpecificationSpecimenBuilder可以使用的:

请注意,要使用带有种子重载的 CreateAnonymous 种子参数类型必须匹配方法返回类型。

0 投票
1 回答
1262 浏览

unit-testing - 为什么 AutoFixture 自定义会导致继承的属性不被填充?

我编写了以下自定义,并将其作为组合的一部分应用于我的大多数测试。我的实体有一个只读 Id,但我在此自定义中使用他们的 SetId 方法来确保所有实体都有一些 Id,如果它们是临时的(还没有 Id)。

这一直很好,直到我今天发现了一件非常奇怪的事情。如果我提供一个直接从 BaseEntity 继承的实体的测试,那么一切都很好,并且它的可写属性是自动填充的。但是,如果我要求从 BaseEntity 更远的东西继承的实体,我的自定义会阻止属性自动填充。

此测试方法中的 User 实体已正确填充:

但是,以下测试中的 AwesomeUser 实体没有自动填充任何相同的属性。

在这两个测试用例中,由于我的自定义,Id 属性是自动填充的。如果我删除我的自定义,SomeOtherTest 的 AwesomeUser 实例会自动填充其继承的属性。我必须假设我的定制是什么搞砸了。

有没有更好的方法让我的所有 BaseEntity 实例设置它们的 ID,或者 AutoFixture 还缺少什么?我首先、中间和最后应用了我的自定义,但无济于事。

0 投票
2 回答
3242 浏览

moq - AutoFixture:模拟方法不返回冻结的实例

我正在尝试编写这个简单的测试:

Verify检查失败。
postProcessor.Process 的代码是

postProcessingActionReader是通过构造函数初始化的接口字段。

我期待测试通过,但它失败了,结果证明IPostProessingActionCreatePostProcessingActionFromJobResultXml方法返回的实例与从fixture.Freeze<>.

我的期望是,在冻结这个 Mock 对象后,它将IPostProcessingAction在所需的每个地方注入接口的底层模拟,并使所有返回的模拟方法返回IPostProcessingAction相同的对象。

我对模拟方法的返回值的期望不正确吗?有没有办法改变这种行为,以便模拟方法返回相同的冻结实例?

0 投票
1 回答
3279 浏览

c# - AutoFixture 无法创建匿名 MVC 控制器

编码:

例外:

System.Reflection.TargetInvocationException:System.Reflection.TargetInvocationException:调用的目标已引发异常。---> System.NotImplementedException:方法或操作未实现。

MyController()接受 3 个参数。

我已经尝试了此处答案中描述的修复程序,但它不起作用。

0 投票
1 回答
333 浏览

c# - Frozen mock 的属性被覆盖

我遇到了一个问题,AutoFixture 似乎正在覆盖冻结模拟上的属性。模拟类的属性是只读的,根据我的阅读,AutoFixture 不应该尝试对它做任何事情。

我在下面的 LINQPad 中包含了重现该问题的代码。Victim是一个具有两个只读属性的普通测试类。问题在于,一旦我为Things属性设置了期望并将模拟注册Object为 AutoFixture 以返回该Victim类型的实例,该集合将Things包含不同的字符串。

要重现此问题,请在 LINQPad 中将以下代码作为C# 程序运行,并从 NuGet引用AutoFixtureMoq 。请务必包含命名空间MoqPloeh.AutoFixture

我的期望是我应该取回我注册的对象,Register并且Things返回Victim的集合应该返回我在调用SetupGet.

0 投票
2 回答
1787 浏览

autofixture - 无效构造函数参数的自动夹具测试

我有以下课程和测试。我想测试将 null 值作为参数传递给构造函数,并期待ArgumentNullException. 但是因为我使用了 Autofixture 的CreateAnonymous方法,所以我得到了一个TargetInvocationException

编写这些测试的正确方法是什么?

0 投票
1 回答
1016 浏览

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.Create 2.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.WhereSelectListIterator 2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator2 .MoveNext() 在 System.Linq.Enumerable.d_a5 1 源) 在Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create 1.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.WhereSelectListIterator2.MoveNext() 在 System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a51.MoveNext() 在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable 1 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.CompositeNodeComposer1.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 处。 WhereSelectListIterator 2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() 在 System.Linq.Enumerable.d _a51.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 来源)在 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.WhereSelectListIterator2.MoveNext()在 System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a51.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.CompositeNodeComposer1.在 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 行