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

0 投票
5 回答
18911 浏览

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 'DbSet1' 上实现。'DbSet`1' 的测试替身必须提供所使用的方法和属性的实现。”

所以让我引用上面链接中的代码示例。此代码示例使用 Moq 模拟 DbContext 和 DbSet。

这就是我与 NSubstitute 的距离

所以问题是;如何替换 IQueryable 的属性(如 Provider)?

0 投票
1 回答
4631 浏览

c# - NSubstitute 虚拟 getter 使用 ForPartsOf 返回替换会引发异常

我正在尝试模拟对象的一个​​属性

有一个类似的问题: 返回返回另一个替代的方法的结果会在 NSubstitute 中引发异常 但是接受的答案对我不起作用。

这些失败,但有以下例外:

0 投票
0 回答
1485 浏览

c# - 使用 NSubstitute 检查单个可选参数

有没有办法检查传递给 NSubstitute 假货的单个值,而不必指定其他值?

使用几个可选参数对方法进行映像:

我希望能够确认将特定值传递给其中一个参数,而不必指定其他参数:

并且不管ab是否通过,都要进行验证调用。

这有效:

但可读性不强,因为不相关的参数会使测试变得混乱,并且如果将另一个参数添加到method.

但是,这将忽略不将默认值传递给可选参数的方法调用:

并且 usingReceivedWithAnyArgs将导致 Arg.Is() 被忽略,创建一个无论b的值如何都通过的测试。

最后,我尝试安排假货来捕捉价值:

但除非签名完全匹配,否则不会命中。我正在寻找一种方法来测试单个值,而无需在将可选参数添加到方法时重写大量测试。

注意:此示例使用int值,但引用类型也会出现同样的问题。

并给维护者一个注释:如果这是一个可行的修改,我希望 Arg.Is 覆盖 ReceivedWithAnyArgs。这将允许创建最少指定的测试。

0 投票
2 回答
3470 浏览

c# - 如何使用 NSubstitute 替换 Object.ToString?

当我尝试使用 NSubstitute 1.7.1.0 来定义 Object.ToString 的行为这是一个虚拟方法)时,NSubstitute 正在引发异常。

重现:

失败:

有没有办法使上述测试通过?

我的天真测试引发的异常是错误还是“设计使然”?

0 投票
2 回答
4407 浏览

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”,因为父类型是密封的。

克服这种情况的一般解决方案是什么?

0 投票
2 回答
2949 浏览

c# - 如何使用 Autofixture 创建和填充我的模拟类?

目前我正在使用 EF6 在 UnitOfWork 中实现我的存储库。我还创建了一个 In-Memory 模拟实现(MockUnitOfWork 和 MockRepository),以便我可以在单元测试中使用它们,但是我现在必须处理繁琐的对象设置。

这不是 Autofixture 的设计初衷吗?我将如何获得一个可以在我的测试中使用的 MockUnitOfWork,其中包含填充的FooBarr存储库?我正在使用 NSubstitute 作为我的模拟框架。

工作单位

存储库

0 投票
1 回答
5330 浏览

c# - 在部分模拟对象中替换只读属性

我正在测试一个 MVC 控制器,它依赖于从基类上的只读属性返回的值。

此属性的 getter 在调用时会引发异常,因为它依赖于HttpContext我宁愿避免嘲笑的(和其他讨厌的东西)。

这是我迄今为止尝试过的:

然而,一旦访问 UserInfo 就会引发异常。

基类的属性是:

我尝试将基类属性设置为虚拟,但随后出现 Castle 代理异常。

0 投票
3 回答
2908 浏览

unit-testing - 如何在 xunit/autofixture 中结合 PropertyData 和 AutoNSubstituteData 属性?

我正在使用[AutoNSubstituteData]发布在这里的属性:

AutoFixture、xUnit.net 和自动模拟

我想将它与[PropertyData("")]xunit 扩展的属性结合起来。

这是我的测试:

有没有办法组合这些属性或获得所需的功能(模拟一切,除了invalidConnstring应该用属性数据填充)?

0 投票
2 回答
269 浏览

c# - 单独测试派生类的行为

我正在尝试在现有代码库中隔离和测试特定类,该代码库派生自某个基础并具有我想模拟的私有类成员:

具体来说,我想使用测试来验证Derived引发某些事件DoSomething以响应_otherSomething引发ItHappened事件。

为了实现这一点,我在我的测试项目中创建了一个MockedDerived类,它是Derived

我使用NSubstitute作为我的 MSTest 测试方法的一部分来模拟一个类,我想做这样的事情:

我遇到的困难在于Base该类带来了相当多的包袱,即它创建了其他类的一些对象,并且这些对象具有一些计时器并最终涉及数据库。

它变得混乱。

我真正想做的就是确保这个Derived类表现出特定的行为并按预期做出响应。

关于如何将这种Derived行为的测试与混乱Base及其各种成员隔离开来的任何建议?也许我只是没有看到明显的解决方案。

0 投票
2 回答
391 浏览

c# - 如何测试我需要try catch

我正在使用 NUnit,我有以下代码将被测试。


我需要测试 myview_ButonClick()
假设我将测试此方法,如果myview.GivenId为 null,它将引发异常?
所以我编写单元测试如下:


但测试失败..为什么?(因为我的 catch 块中没有投掷)。但我不想扔任何东西,我只想让它有能力接住。那么可以测试吗?