问题标签 [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.
c# - 有没有办法用测试数据创建一个类型的实例?
我有一个类型,想用测试数据创建它的一个实例。
我知道像NBuilder或AutoFixture<T>
这样的框架可以创建在设计时( )已知的类型的实例。这些框架是否能够基于仅在运行时才知道的类型(Type
)创建实例?
最后我想做类似的事情:
c# - 如何让 Autofixture 创建包含具有接口类型的属性的类型的实例?
我有这样一堂课:
围绕 IPagination 接口创建一个动态代理,并用测试数据填充代理。现在是否可以让 AutoFixture 创建 ViewModel 类型的实例?请注意,我只知道运行时的类型 ( typeof(ViewModel)
)。
现在我知道我可以做到这一点:
c# - 如何让 AutoFixture AutoMoq 从实例化对象中的注入服务返回结果?
我正在尝试测试一个使用存储库服务的服务类。我已经设置了我认为应该与我的存储库服务一起使用的自定义设置,而是返回默认的匿名结果。如果您查看下面的代码示例,当我调用 svc.GetFoos 方法时,我试图取回我在自定义类中注册的“Foo”对象,但我什么也没得到:
如果我在夹具实例化之后将以下代码添加到 Main 方法中,它会按我想要的方式工作,但是我手动设置了我的模拟,我不确定 AutoFixture AutoMoq 给我带来了什么:
谢谢。
xunit - 如何修改我的自定义理论数据属性为 AutoFixture 创建的夹具?
我真的很欣赏 AutoFixture 的强大功能以及 XUnit 的理论。我最近采用了封装自定义并通过属性将它们提供给我的测试的方法。
在某些情况下,我需要一个一次性的场景来运行我的测试。当我像上面一样使用 AutoDomainDataAttribute 时,我可以要求一个 IFixture 并期望获得由该属性创建的相同实例吗?
在我的场景中,默认情况下我对集合等使用 MultipleCustomization。但是,在这种情况下,我只希望将单个项目发送到我的 SUT 的构造函数。所以,我已经像这样定义了我的测试方法:
不幸的是,我在创建匿名产品时遇到了异常。如果我要求 Product 作为具有这些属性的方法参数,其他测试工作得很好。在这种特殊情况下,这只是一个问题,我希望fixture 参数与我的AutoDomainDataAttribute 创建的参数相同。
由于我通过 AutoDomainData 进行了就地自定义,产品的构造函数需要一个 IEnumerable,该 IEnumerable 通常会填充 3 个项目。目前,我的 DomainCustomization 是由 MultipleCustomization 和 AutMoqCustomization 按顺序组成的 CompositeCustomization。
例外是:“InvalidCastException:无法将 'Castle.Proxies.ObjectProxy' 类型的对象转换为 'Product' 类型。”
testing - 我可以告诉 AutoFixture 为继承自它的类的所有实例调用一些基本方法吗?
我有一个Entity
公开只读 Id 属性的类。此属性在保存后通过 ORM 设置(不再是瞬态的)。我想让 AutoFixture 调用一个方法,该方法在内部为从 Entity 继承的类的所有实例设置 Id 属性。
有几个自定义项应用于注册这些后代中的少数几个的创建,所以我想确保它们首先运行。我想理想的情况是允许我在从夹具返回之前对匿名值运行一些修改代码。
例如,当我调用 时fixture.CreateAnonymous<Order>()
,会有一些其他自定义(或类似的)可以在该 Order 实例返回之前对其进行修改。
这种修改不仅会拦截Order
,还会拦截任何Entity
后代。
c# - 如何在起订量中调试验证?
我正在为数据库调用方法使用 IDatabase 类附带的 NPoco。我想验证进入 NPoco Insert 方法的对象是否具有正确的数据(以域对象的形式)。
被调用的代码(什么应该触发验证)
c# - AutoFixture/AutoMoq 忽略注入的实例/冻结模拟
找到解决方案后的简短内容:
AutoFixture 返回冻结的模拟就好了;我的 sut 也是由 AutoFixture 生成的,它只有一个公共属性,该属性具有对测试很重要的本地默认值,并且 AutoFixture 设置为新值。从马克的回答中可以学到很多东西。
原始问题:
我昨天开始为我的 xUnit.net 测试开始尝试 AutoFixture,这些测试中都有 Moq。我希望替换一些 Moq 的东西或使它更易于阅读,我对在 SUT Factory 容量中使用 AutoFixture 特别感兴趣。
我用 Mark Seemann 的一些关于 AutoMocking 的博客文章武装自己,并尝试从那里开始工作,但我并没有走得太远。
这是我的测试在没有 AutoFixture 的情况下的样子:
这里的故事很简单 - 确保使用正确的键(硬编码/属性注入)SettingMappingXml
查询ISettings
依赖项并将结果作为XElement
. 仅当ITracingService
出现错误时才相关。
我试图做的是摆脱显式创建ITracingService
对象然后手动注入依赖项的需要(不是因为这个测试太复杂,而是因为它足够简单,可以尝试并理解它们)。
输入 AutoFixture - 第一次尝试:
我希望CreateAnonymous<SettingMappingXml>()
,在检测到ISettings
构造函数参数后,会注意到已经为该接口注册了一个具体实例并注入了它——但是,它并没有这样做,而是创建了一个新的匿名实现。
这尤其令人困惑,因为fixture.CreateAnonymous<ISettings>()
确实返回了我的实例-
使测试完全绿色,这条线正是我期望 AutoFixture 在实例化SettingMappingXml
.
然后是冻结组件的概念,所以我只是将模拟冻结在夹具中,而不是获取模拟对象:
果然这工作得很好——只要我明确地调用SettingMappingXml
构造函数并且不依赖CreateAnonymous()
.
简而言之,我不明白为什么它会以明显的方式工作,因为它违背了我能想到的任何逻辑。通常我会怀疑库中存在错误,但这是一个非常基本的东西,我相信其他人会遇到这个问题,而且它早就被发现并修复了。更重要的是,知道 Mark 对测试和 DI 的孜孜不倦的态度,这不可能是无意的。
这反过来意味着我必须错过一些相当基本的东西。如何让 AutoFixture 创建我的 SUT,并将预配置的模拟对象作为依赖项?我现在唯一确定的是我需要 .AutoMoqCustomization
所以我不必为ITracingService
.
AutoFixture/AutoMoq 包是 2.14.1,Moq 是 3.1.416.3,都来自 NuGet。.NET 版本为 4.5(与 VS2012 一起安装),在 VS2012 和 2010 中的行为相同。
在写这篇文章时,我发现有些人在使用 Moq 4.0 和程序集绑定重定向时遇到问题,所以我仔细清除了我的解决方案中的任何 Moq 4 实例,并通过将 AutoFixture.AutoMoq 安装到“干净”项目中来安装 Moq 3.1。但是,我的测试行为保持不变。
感谢您的任何指示和解释。
更新:这是 Mark 要求的构造函数代码:
为了完整起见,该GetXml()
方法如下所示:
SettingKey
只是一个自动属性。
c# - 如何将 AutoFixture 自定义应用于从基类继承的任何内容?
为了干掉我的单元测试,我尝试使用 AutoFixture 作为 IoC 容器来实例化我的被测系统 (SUT),在这种特殊情况下是 ASP.NET MVC Controller
。因此,我想自定义 AutoFixture 以创建没有自动属性的控制器。
我尝试为 . 添加自定义ControllerBase
,但它似乎不适用于ControllerBase
.
这是我希望能够编写的测试示例:
当然,如果我为项目中的每个特定控制器手动添加一个自定义项,它就会起作用,但谁愿意这样做呢?有没有更好的办法?
interface - AutoMoqCustomization 是否适用于抽象类?
请注意,我对 TDD 有点陌生,所以我会接受一般建议和具体答案。
抽象类和接口都不能被实例化。显然,Moq 可以在第二个测试中给我一个模拟的 ADataFeed 实例。为什么 AutoMoqCustomization 对接口起作用,IDataFeed
但对抽象类不起作用ADataFeed
,而是抛出 InvalidOperationException?
其次,AutoFixture 方法(或一般的 TDD)将是什么来驱动可能调用具有构造函数的抽象类的设计来要求和保证某些值,例如在这种情况下的连接字符串?
c# - 当子实体有多个路径时如何生成对象?
我正在开发一个具有与此类似的域模型的应用程序,其中 aLineItem
既可以从 anOrder
也可以从Shipment
.
如果我使用 AutoFixture 来生成,我怎样才能对和Order
使用相同的集合?LineItems
order.LineItems
order.Shipments*.ItemShipments*.LineItem
理论上,应该通过以下测试:
...虽然我也希望能够根据测试生成部分发货的订单。
(有一个可靠的论点是 Order 上的 line item 和 Shipment 上的 line item 是不同的东西,我不应该使用同一个类来表示它们。但是,我正在使用的数据来自遗留系统,对此无能为力。)