问题标签 [nsubstitute]
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# - NSubstitute DbSet / IQueryable
所以 EntityFramework 6 的可测试性比以前的版本要好得多。互联网上有一些像 Moq 这样的框架很好的例子,但情况是,我更喜欢使用 NSubstitute。我已经翻译了“非查询”示例以使用 NSubstitute,但我无法理解“查询测试”。
Moq 如何items.As<IQueryable<T>>().Setup(m => m.Provider).Returns(data.Provider);
转换为 NSubstitute?我想类似的东西,((IQueryable<T>) items).Provider.Returns(data.Provider);
但没有奏效。我也试过items.AsQueryable().Provider.Returns(data.Provider);
,但也没有用。
我得到的例外是:
“System.NotImplementedException:成员 'IQueryable.Provider' 尚未在类型 'DbSet
1Proxy' which inherits from 'DbSet
1' 上实现。'DbSet`1' 的测试替身必须提供所使用的方法和属性的实现。”
所以让我引用上面链接中的代码示例。此代码示例使用 Moq 模拟 DbContext 和 DbSet。
这就是我与 NSubstitute 的距离
所以问题是;如何替换 IQueryable 的属性(如 Provider)?
c# - 使用 NSubstitute 检查单个可选参数
有没有办法检查传递给 NSubstitute 假货的单个值,而不必指定其他值?
使用几个可选参数对方法进行映像:
我希望能够确认将特定值传递给其中一个参数,而不必指定其他参数:
并且不管a或b是否通过,都要进行验证调用。
这有效:
但可读性不强,因为不相关的参数会使测试变得混乱,并且如果将另一个参数添加到method
.
但是,这将忽略不将默认值传递给可选参数的方法调用:
并且 usingReceivedWithAnyArgs
将导致 Arg.Is() 被忽略,创建一个无论b的值如何都通过的测试。
最后,我尝试安排假货来捕捉价值:
但除非签名完全匹配,否则不会命中。我正在寻找一种方法来测试单个值,而无需在将可选参数添加到方法时重写大量测试。
注意:此示例使用int
值,但引用类型也会出现同样的问题。
并给维护者一个注释:如果这是一个可行的修改,我希望 Arg.Is 覆盖 ReceivedWithAnyArgs。这将允许创建最少指定的测试。
c# - 如何使用 NSubstitute 替换 Object.ToString?
当我尝试使用 NSubstitute 1.7.1.0 来定义 Object.ToString 的行为(这是一个虚拟方法)时,NSubstitute 正在引发异常。
重现:
失败:
有没有办法使上述测试通过?
我的天真测试引发的异常是错误还是“设计使然”?
c# - 替换密封类
我有一个A
将 aHttpRequestHeaders
作为属性公开的类。被测试的类是B
.
B
正在使用A
.A
也是一个仅用于单元测试的假类。A
继承一个强加HttpRequestHeaders
属性定义的接口。
所以我需要替换,HttpRequestHeaders
以便我可以测试B
不幸HttpRequestHeaders
的是一个密封类,因此它不能被 NSubstitute 替换:
无法从程序集“DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=a621a9e7e5c32e69”加载类型“Castle.Proxies.HttpRequestHeadersProxy_2”,因为父类型是密封的。
克服这种情况的一般解决方案是什么?
c# - 如何使用 Autofixture 创建和填充我的模拟类?
目前我正在使用 EF6 在 UnitOfWork 中实现我的存储库。我还创建了一个 In-Memory 模拟实现(MockUnitOfWork 和 MockRepository),以便我可以在单元测试中使用它们,但是我现在必须处理繁琐的对象设置。
这不是 Autofixture 的设计初衷吗?我将如何获得一个可以在我的测试中使用的 MockUnitOfWork,其中包含填充的Foo和Barr存储库?我正在使用 NSubstitute 作为我的模拟框架。
工作单位
存储库
c# - 在部分模拟对象中替换只读属性
我正在测试一个 MVC 控制器,它依赖于从基类上的只读属性返回的值。
此属性的 getter 在调用时会引发异常,因为它依赖于HttpContext
我宁愿避免嘲笑的(和其他讨厌的东西)。
这是我迄今为止尝试过的:
然而,一旦访问 UserInfo 就会引发异常。
基类的属性是:
我尝试将基类属性设置为虚拟,但随后出现 Castle 代理异常。
unit-testing - 如何在 xunit/autofixture 中结合 PropertyData 和 AutoNSubstituteData 属性?
我正在使用[AutoNSubstituteData]
发布在这里的属性:
我想将它与[PropertyData("")]
xunit 扩展的属性结合起来。
这是我的测试:
有没有办法组合这些属性或获得所需的功能(模拟一切,除了invalidConnstring
应该用属性数据填充)?
c# - 单独测试派生类的行为
我正在尝试在现有代码库中隔离和测试特定类,该代码库派生自某个基础并具有我想模拟的私有类成员:
具体来说,我想使用测试来验证Derived
引发某些事件DoSomething
以响应_otherSomething
引发ItHappened
事件。
为了实现这一点,我在我的测试项目中创建了一个MockedDerived
类,它是Derived
:
我使用NSubstitute作为我的 MSTest 测试方法的一部分来模拟一个类,我想做这样的事情:
我遇到的困难在于Base
该类带来了相当多的包袱,即它创建了其他类的一些对象,并且这些对象具有一些计时器并最终涉及数据库。
它变得混乱。
我真正想做的就是确保这个Derived
类表现出特定的行为并按预期做出响应。
关于如何将这种Derived
行为的测试与混乱Base
及其各种成员隔离开来的任何建议?也许我只是没有看到明显的解决方案。
c# - 如何测试我需要try catch
我正在使用 NUnit,我有以下代码将被测试。
我需要测试 myview_ButonClick()
假设我将测试此方法,如果myview.GivenId
为 null,它将引发异常?
所以我编写单元测试如下:
但测试失败..为什么?(因为我的 catch 块中没有投掷)。但我不想扔任何东西,我只想让它有能力接住。那么可以测试吗?