问题标签 [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 投票
3 回答
1277 浏览

autofixture - 注册。使用 AutoFixture 对 Html 助手进行单元测试

原来的问题是: Unit Testing an Html Helper with AutoFixture

不确定我是否应该重新打开原始问题;但是,由于我将原始问题标记为已解决,因此我决定创建一个新问题。抱歉,如果我做错了。

我正在使用 Mark 建议的方法,但在使用 Freeze 时卡住了。

下面是完整的源代码… 被测类:

单元测试是为了确保 HttpContext 中指定键的 Html 按预期返回

我配置了夹具如下

然后在 ViewContext 上冻结:

我得到以下异常:

错误 1 ​​测试“MvcDemo2.Tests.Controllers.SampleHelpersTestsAutoFixture.SampleTableHtmlHelper_WhenKeyExistWithinHttpContext_ReturnsExpectedHtml”失败:System.Reflection.TargetInvocationException:调用目标已引发异常。---- System.NotImplementedException : 方法或操作未实现。在 System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo 方法,对象目标,Object[] 参数,SignatureStruct& sig,MethodAttributes methodAttributes,RuntimeType typeOwner)在 System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo 方法,对象目标,Object[] 参数,签名 sig,MethodAttributes methodAttributes , RuntimeType typeOwner) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder,
在 System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfoculture) at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) at Ploeh.AutoFixture.Kernel.AutoPropertiesCommand 1.Create 1.Execute(T specimen, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.Postprocessor(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator 2.MoveNext() at System .Linq.Enumerable.d__a52.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator

1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1 来源)在 Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Kernel.SpecimenContext.Resolve(Object request )在 Ploeh.AutoFixture.Kernel.SeedIgnoringRelay.Create(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.b__1(ISpecimenBuilder b) 在 System.Linq.Enumerable.WhereSelectListIterator 2.MoveNext() 在System.Linq.Enumerable.d__a5 1 来源)在 Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) 在 Ploeh.AutoFixture.Kernel.Postprocessor 2.MoveNext()2.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator

1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1.Create(Object request, ISpecimenContext context) at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.<>c__DisplayClass6.<Create>b__1(ISpecimenBuilder b) at System.Linq.Enumerable.WhereSelectListIterator
在 System.Linq.Enumerable.WhereSelectEnumerableIterator 1.MoveNext() 在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable 2 范围,HttpContextBase httpContext) 在 System.Web.Mvc.ViewContext.SetClientValidationEnabled(启用布尔值,IDictionary`2 范围, HttpContextBase httpContext) 在 System.Web.Mvc.ViewContext.set_ClientValidationEnabled(布尔值) C:\Users... 78 2.MoveNext()
at System.Linq.Enumerable.<DefaultIfEmptyIterator>d__a5

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.SpecimenContext.Resolve(Object request) at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous[T](ISpecimenContext context, T seed) at Ploeh.AutoFixture.SpecimenFactory.CreateAnonymous[T](ISpecimenBuilderComposer composer, T seed) at Ploeh.AutoFixture.FixtureFreezer.Freeze[T](IFixture fixture, T seed)
at MvcDemo2.Tests.Controllers.SampleHelpersTestsAutoFixture.SampleTableHtmlHelper_WhenKeyExistWithinHttpContext_ReturnsExpectedHtml() in C:\Users\...:line 78 ----- Inner Stack Trace ----- at System.Web.HttpContextBase.get_Items() at System.Web.Mvc.ViewContext.ScopeCache.Get(IDictionary

似乎它在尝试设置属性 ViewContext.SetClientValidationEnabled 的值时失败。

我坚持这一点。任何想法都非常感谢。

0 投票
1 回答
556 浏览

entity-framework - 如何使用 AutoFixture 添加假 EF4 Rerefence(如果可能,也可以不添加)

我有以下代码:

看起来像这一行:

当执行导致异常时,我试图模拟引用对象,如果我在没有这个的情况下调用代码,一切正常,但我的测试代码需要 sys_COUNTRYReference 对象。

例外:

当此 RelatedEnd 的所有者为空时,不允许请求的操作。使用默认构造函数创建的 RelatedEnd 对象只能在序列化期间用作容器。

请就如何解决此问题或从不同角度进行攻击提出建议。

谢谢你。

0 投票
2 回答
601 浏览

c# - 在大型依赖对象图上注入 Mocks

对于要测试的对象,我有一个相当重要的依赖关系图。什么是解决我的依赖关系而不必到处注册模拟的最简单方法?

例如,我有一个这样的依赖图:

我想测试PublicApi.CreateUser(),我希望它运行所有代码,但我想模拟存储库,所以我不必向数据库写入任何内容。我应该只使用 DI 容器并注册我的所有服务,用模拟替换存储库,然后解析PublicApi并运行该方法吗?

我正在研究 AutoFixture,它看起来可能能够处理这样的事情,但我不能完全理解整个“冻结”与“注册”以及它与 Moq 的集成。

0 投票
1 回答
2985 浏览

c# - 如何验证方法是否被调用?

我有一个ICreateService依赖于ITicketApiAdapter. 我尝试注册一个模拟 ITicketAdaper 以便在我创建匿名创建服务时注入它。

所以,在设置中,我有这个用于票证适配器的寄存器:

据我了解,这应该“冻结”两者ICreateServiceMock<ITicketApiAdapter>这样当我请求一个匿名实例时,它就是我注册的那个。

我有一个看起来像这样的测试:

我希望 apiTicketAdapter 是我注册的那个,以便我可以验证该方法是否被调用。如果我单步执行,则会调用 TicketApiAdapter,但 Moq 说没有。

编辑

这是我得到的错误:

CreateServiceCallsAddTicketComment 抛出异常:Moq.MockException:预期在模拟上调用一次,但为 0 次:x => x.AddTicketComment(It.IsAny(), It.IsAny(), It.IsAny())

配置的设置:x => x.AddTicketComment(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never 没有执行调用。

0 投票
1 回答
1241 浏览

data-annotations - 为什么 AutoFixture 不能使用 StringLength 数据注释?

我再次尝试升级到AutoFixture 2,但我的对象上的数据注释遇到了问题。这是一个示例对象:

我正在尝试创建一个 anonymous Bleh,但是带有注释的属性是空的,而不是填充了匿名字符串。

根据 Bonus Bits,StringLength应该从 2.4.0 开始支持,尽管即使不支持我也不希望出现空字符串。我正在使用来自NuGet的 v2.7.1 。我是否错过了创建数据注释对象所需的某种自定义或行为?

0 投票
2 回答
45030 浏览

nunit - 使用验证确认 Moq 模拟类中的预期参数值

我正在尝试验证是否使用预期的对象参数调用了模拟中的方法。我正在使用 Moq、nUnit,并认为 AutoFixture 的 Likeness 应该可以完成工作。下面是我正在尝试做的简化版本。

有没有办法用 AutoFixture 做到这一点?有没有更好的方法来验证是否Something使用适当的参数调用?

在类中覆盖 EqualsA以比较属性值并将Verify行更改为:

通过,但是我不想在我的项目中像 A 这样的每个类中覆盖 Equals 。

0 投票
1 回答
1879 浏览

c# - 使用 AutoFixture 为字符串属性生成匿名数字

我正在对一些映射方法进行单元测试,并且我有一个字符串类型的源属性,它映射到整数类型的目标属性。

所以我希望 AutoFixture 使用匿名整数为特定字符串属性创建源对象,而不是为所有字符串属性。

这可能吗?

0 投票
1 回答
1684 浏览

c# - AutoFixture Likeness - 仅比较匹配的属性

我希望能够使用 AutoFixture.SemanticComparison 比较以下两个对象的相似性:

现在,当我这样做时:

我收到以下异常:“以下成员不匹配:- b。”

我发现我可以像这样省略'b'成员:

但是,我发现这很麻烦,因为每当我向 Object2 类添加新成员时,我都必须更正我的单元测试(或者至少是单元测试助手)。

有没有办法说“我只想比较两个对象中存在的子集的相似性”?

0 投票
3 回答
1514 浏览

c# - 使用例如 Moq 和 AutoFixture 创建模拟对象和匿名对象的混合体?

我在工作中遇到了这样一个类:

问题是我有一些代码可以访问 A、B 和 C 并调用 GetSomeValue() 方法(现在,我会说这不是一个好的设计,但有时我的双手被束缚了 ;-))。我想创建这个对象的模拟,同时将 A、B 和 C 设置为一些值。所以,当我这样使用起订量时:

让我在 GetSomeValue() 方法上设置结果,但是所有属性都设置为 null (并且使用 Setup() 设置所有属性非常麻烦,因为真实对象是一个讨厌的数据对象并且具有比上面更多的属性简化示例)。

所以另一方面,像这样使用 AutoFixture:

让我无法调用 GetSomeValue() 方法。

有没有办法将两者结合起来,拥有匿名值和设置调用结果的能力?

编辑

根据 nemesv 的回答,我得出了以下实用方法(希望我做对了):

0 投票
2 回答
1676 浏览

c# - 如何测试需要工厂的课程?

我正在尝试测试一个需要工厂(Func<T>)的类,并且我正在使用 Moq 和 AutoFixture。

设置“环境”以查看工厂是否已使用以及在返回的实例上使用了多少次以及使用了哪些方法的最佳方法是什么?

目前我正在模拟T和计算所有返回的模拟实例InjectingFunc<T>

但这对我来说有点可疑/丑陋。而且我很确定测试类中的实例变量是一件危险的事情