问题标签 [automoq]
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.
c# - 在 AutoMoq 中将泛型类的属性作为参数传递
我正在尝试做的是概括使用 AutoFixture 和 Moq 制作存储库。我有一个名为“添加”的方法,可以将虚假记录添加到列表中。该列表称为记录,对类是全局的。通用 M 是要模拟的模型。该方法返回“this”,因此可以链接该方法。
使用扩展类(我发现这个搜索 SO):
我得到的错误是“Ploeh.AutoFixture.dll 中发生 ArgumentException”。
我的问题是:当模型在编译时未知时,如何将通用对象的属性作为参数传递给方法?
c# - AutoFixture AutoMoq 不为某些属性创建模拟
我正在使用 AutoFixtureAutoMoqCustomization
并尝试创建一个包含只读属性的类的实例,因此:
这个想法是我应该能够ILog
使用以下方法冻结我的测试测试:
并验证它是在 main 方法调用之后通过以下方式调用的:
但是,当我调用fixture.Create<MyService>
AutoFixture 时,不会Logger
用模拟的ILog
. 我还尝试删除默认值LogManager.GetLogger<etc>
,在这种情况下,ILog
值为null
。
其他属性正确填充了测试替身,但不是这个。
作为参考,该ILog
接口来自 ServiceStack 的日志框架,如下所示:
我还验证了手动创建 Mocks 并使用 Moq 进行设置 - 该ILog
属性已正确替换为我的 Mock 使用:
任何人都可以对此有所了解吗?
重现步骤
测试
服务类- 注意:通常该Logger
属性将带有后缀= LogManager.GetLogger(typeof(MyService))
,但我在这一点上省略了它以查看问题。
如果您在该service.Post(null)
行上设置断点,您将看到该ILog
属性仍然为空,但其他属性有模拟。
autofixture - 使用具有通用签名的 AutoMoq 方法
我目前正在使用一个使用 xUnit、AutoMoq、AutoFixture 和 AutoFixture.XUnit2 组合在一起的测试框架。我遇到了具有通用签名的模拟方法的问题。
AutoFixture 似乎可以很好地处理通用项目。如果我要求 aCustomeObject<Task<List<Task<string>>>>
或其他一些可笑的嵌套泛型类型,它似乎会按预期生成它们,一直到最后一个节点。
但是,如果我有这样的界面:
然后尝试从我从 AutoMoq 获得的模拟中调用该方法,它只返回 null。因此,例如:
在此代码中,结果将为空。这对我来说似乎很奇怪。它不应该去自动固定并尝试创建一个 T 类型的值,即一个新字符串吗?似乎 Autofixture 已经表明它可以很好地处理泛型。
或者您是否总是只需要手动设置任何在其签名中具有泛型的模拟方法?
c# - AutoMock 设置与 AutoFixture 数据理论
好的,正如我在另一个问题中回答的AutoMoq
那样,默认情况下不使用 AutoFixture。这很好,通过设置和设置很容易解决ReturnsUsingFixture
。
但这可以通过自动夹具数据理论进行设置吗?
所以我们有一个自定义的 AutoDataAttribute,我将调用它[MyAutoData]
。在那里,我们调用并设置了一堆自定义项,例如AutoConfiguredMoqCustomization
,将其配置为生成 webapi 控制器,并注册许多自定义生成器。所以我们已经能够将几乎所有的样板配置提取到一些基本的配置文件中。我们甚至MyAutoData
为系统测试设置了属性,所以如果您要求,比如说,Id<Account>
它会使用实际的 webapi 调用创建一个新帐户并返回一个有效的帐户 ID。
但是您如何处理设置AutoMoq
方法返回的问题呢?这是一个例子:
在其他所有情况下,我们都能够将这种配置移入MyAutoData
(或它调用的类)。但是对于 AutoMoq,我看不出它应该如何工作。我们不能做固定装置。
有没有办法在 AutoFixture 生成项目之后但在将其交付给测试方法之前触发设置方法?或者有没有办法自定义 AutoMoq 行为以始终使用.ReturnsUsingFixture(fixture)
?还是我只是在想这个问题都错了?
c# - AutoFixture + AutoMoq:创建具有排除属性的模拟
例如ISomething
,一个具有三个属性的接口:string Name
以及一些我不希望 AutoFixture 构建的int Count
复杂属性(具有循环依赖项等)。ImComplex
所以我需要 AutoFixture 来创建一个 MockISomething
并按其默认算法设置Name
并设置为 null。但是,如果我尝试像这样解决它,我会得到一个例外:Count
ImComplex
Ploeh.AutoFixture.ObjectCreationException :装饰的 ISpecimenBuilder 无法根据请求创建样本:RP.Core.IInformationUnit。如果请求代表一个接口或抽象类,就会发生这种情况;如果是这种情况,请注册一个可以根据请求创建样本的 ISpecimenBuilder。如果这发生在强类型构建表达式中,请尝试使用 IFactoryComposer 方法之一提供工厂。
我应该怎么办?
moq - 如何使 AutoMoqCustomization 使用 Strict MockBehavior?
将 AutoFixture 与 AutoFixture.AutoMoq 包一起使用,我有时会发现未配置为正确测试他们要测试的东西的测试,但由于默认的(松散)模拟行为,从未发现问题:
我想让 Mocks 使用严格的行为创建,所以我们不得不调用Setup()
我们期望调用的方法。我可以像这样为每个单独的模拟执行此操作:
但是在梳理了 AutoMoqCustomization() 的源代码以及各种ISpecimenBuilder
和其他实现之后,我对让所有 Mocks 以严格行为初始化的最佳方法感到非常迷茫。该框架似乎非常灵活和可扩展,所以我确信有一种简单的方法可以做到这一点——我只是不知道怎么做。
moq - 使 AutoMoq 返回夹具创建的方法值
我想探索我们是否可以通过设置 AutoMoq 创建的所有 Moq-mocks 默认返回 Fixture-created 值作为方法返回值来节省时间。
在进行如下测试时,这将是有益的:
请注意,生成的值必须缓存在(?)代理中,我们希望相同的值“冻结”以便检查。此外,设置模拟Setup
应该覆盖创建的值。
那么,我们如何修改 AutoMoq 模拟来做到这一点?
验证它是否有效的简单测试可能是:
c# - 在 xUnit/Shouldly/AutoMoq/Autofixture 中,我们是否可以使用 InlineAutoMoqData 传入一个可以用作在测试本身?
我在单元测试中遇到了一个我无法解决的问题。我认为最简洁的说法是:
我希望能够使用 Theory InlineAutoMoqData 参数中提供的 Type 作为 Shouldly 的 Should.Throw 方法中的 T。这将允许我创建不同的行测试(我猜这是这个框架中的内联理论)期望不同的异常类型,如果有多个与方法相关联。
我不确定这是否可能,但这是单元测试本身的一个示例。
在被难住并发布此问题之前,我查看的问题是:为模板动态创建泛型类型并使用包含类型的变量创建 Generic<T> 类型实例
这样的事情可能吗?
编辑:
我看到在 xUnit 中我可以通过 Assert.Throws(Type, Delegate) 方法实现这一点。
我仍然想知道是否有办法在我希望类型位于通用方法中时实现它。
c# - C# – 使用 Moq 模拟方法以在第二次调用时返回不同的值
我正在使用 Moq 使用异步方法模拟存储库。此方法必须调用 2 次。在第一次调用此方法时,我需要获取空值。其次,我需要获取一些参数。如果此方法不是异步的,那么我可以使用
所以最后一行出错了。结果必须是这样的:
但我需要一次调用它?
c# - 模拟接口在每个属性上获得两个幻像调用
我有一个简单的类,它向控制台写入一条以当前时间为前缀的消息。它依赖于IDateTimeProvider
接口作为抽象DateTime.Now
为了测试Write
方法调用IDateTimeProvider.Now
,我使用 xUnit、AutoFixture 和 Moq 编写了以下测试:
我正在使用AutoMoqDataAttribute
http://blog.ploeh.dk/2010/10/08/AutoDataTheorieswithAutoFixture/
上面的测试失败并显示以下消息:
预期在模拟上调用一次,但为 3 次:m => m.Now
未配置任何设置。
所以我的问题是:额外的调用(接口上的每个属性两个)来自哪里?
如果我放弃使用AutoMoqDataAttribute
问题就消失了:
这个版本的测试通过了,但我宁愿使用参数来做。