问题标签 [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# - 替换 IDBSet/IQueryable 的 Any() 调用
我正在尝试用 NSubstitute替换调用Any()
,但测试失败并显示为IDBSet<T>
ArgumentNullException
测试名称:TestMethod1 测试全名:Clientmanagement.Tests.UnitTest1.TestMethod1 测试源:c:\develop\Clientmanagement\Clientmanagement.Tests\UnitTest1.cs:第 12 行测试结果:失败测试持续时间:0:00:00.3701927
结果消息:测试方法 Clientmanagement.Tests.UnitTest1.TestMethod1 抛出异常:System.ArgumentNullException:值不能为空。参数名称:参数结果 StackTrace:在 System.Linq.Expressions.Expression.RequiresCanRead(Expression expression, String paramName) at System.Linq.Expressions.Expression.ValidateOneArgument(MethodBase method, ExpressionType nodeKind, Expression arg, ParameterInfo pi)
at System。 Linq.Expressions.Expression.ValidateArgumentTypes(MethodBase 方法,ExpressionType nodeKind,ReadOnlyCollection 1 参数)在 System.Linq.Expressions.Expression.Call(Expression 实例,MethodInfo 方法,Expression[] 参数)在 System.Linq.Queryable.Any[TSource ](可查询1& arguments)
at System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, IEnumerable1 source, Expression
1 谓词)在 c:\develop\Clientmanagement\Clientmanagement.Tests\UnitTest1.cs:line 19 中的 Clientmanagement.Tests.UnitTest1.TestMethod1()
这是我的测试方法的样子
现在我的问题是是否可以IQueryable
用 NSubstitute 替代方法?我的测试方法设置错了吗?
c# - NSubstitute 清除When().Do()
NSubstitute 是否可以清除或删除以前的 .When().Do() 配置?
c# - 在 C# 中自动创建对象母类
我正在使用Object Mother进行单元测试,我不想编写所有 OM 类 == 重复的类结构。是否可以创建一些会自动生成 OM 类的基本 OM 类?
这应该将所有属性创建为 public 和 CreateInstance 方法,该方法创建类对象并注入所有属性。可能吗?最佳做法是什么?或者可能是一些自动 T4 代码生成等。谢谢。
c# - 如何使用 nsubstitute 覆盖设置属性方法
在单元测试中,我在使用 nsubstitute 注册它们时替换了所有视图。但是,当我处理 1 个视图时,将 1 个属性(对象类型)设置为 null 时会引发错误。错误是“值不能为空。参数名称:集合”
作为一种解决方法,我想使用 nsubstitute 来拦截此属性的 set 方法,当参数为 null 时,要么忽略它,要么将其设置为其他值。
我尝试了很多变化,我认为 When..Do 是我需要的,但没有运气实现它。这是我的最后一次尝试:
仅供参考,这里是 nsubstitute 错误的堆栈跟踪:
nsubstitute - NSubstitute:Arg.Do 不满足调用参数列表
对于下面的代码,我得到这个断言失败并且不知道为什么:
Assert.AreEqual failed. Expected:<2>. Actual:<0>.
c# - NSubstitute 中的 TargetInvocationException
我想编写一个测试检查我的抽象类构造函数是否正确处理无效参数。我写了一个测试:
这个测试没有通过,因为 NSubstitute 抛出 aTargetInvocationException
而不是ArgumentException
. 我寻求的实际例外实际上是其中InnerException
的一个TargetInvocationException
。我可以编写一个辅助方法,例如:
但我想,应该有某种通用的方法来解决这个问题。有吗?
autofac - NSubstitute 和 Autofac - 断言没有按预期工作
我有一个具有以下课程的 Web API 项目。此类基本上是注册所有ApiController
实例并设置DependencyResolver
.
为了测试这个类实际上设置了所有 API 控制器,我有以下测试
当我运行这个测试时,我得到以下异常NSubstitute
这是令人困惑的输出。NSubstitute
当实际呼叫和预期呼叫完全相同时,我不明白为什么不高兴。有什么线索吗?
c# - NSubstitute 不处理内部属性
假设我有以下课程:
现在,我尝试使用 NSubstitute 进行模拟:
但这失败了:
来自程序集“DynamicProxyGenAssembly2,版本=0.0.0.0,文化=中性,PublicKeyToken=a621a9e7e5c32e69”的“Castle.Proxies.TestProxy”类型中的方法“get_Prop”没有实现。
我想添加NSubstitute
到[InternalsVisibleTo]
,但不幸的是我测试的程序集是签名的,NSubstitute
不是Internals
也不能是VisibleTo
无符号的类。
我怎么解决这个问题?
c# - 存根/模拟 2 级在一个类中
我有一个无法测试的设置提供程序(企业遗留代码)。我正在尝试将设置提供程序包装在设置存储库中,以减少不可测试代码的数量。因此,我们将有 1 个使用 Settings 提供程序的方法,而不是 20 个方法。其余的实现 SettingsRepository 接口。
不过,之后我在进行测试时遇到了麻烦,这通常表明我做错了什么。
我希望你能帮助找出什么。
我使用统一注入存储库。我从存储库中获取内容的方式如下:
所以这就是问题所在。我可以使用nsubstitute模拟/存根 SettingsRepository 接口,但我需要做的实际上是模拟“设置”以设置 SecureCache 的返回。
有没有办法在 nsubstitute 中“深度模拟”所以我可以做类似的事情:
目前“设置”为空,我没有可以在那里模拟的任何东西。
我的后备解决方案是直接在 SettingsRepository 上添加所有设置字段,但我希望避免这种情况,因为它只会将不可测试的代码移动到解决方案的其他位置。
c# - 无法在 WPF 设计器中将类型为“Castle.Proxies.XProxy”的对象转换为类型“X”
我最近从 Blend 中发现了非常有用的 WPF 组件设计时属性,它(除其他外)允许您仅在设计时设置 DataContext。惊人的!
结合 DesignInstance 属性,您可以设置在设计时自动创建和绑定的类型,允许您使用 Visual Studio 设计器和一些上下文来了解您的 WPF 组件在运行时的实际外观。它真的很好,我希望它没有花我这么长时间才发现。
显然,因为我在这里而不是在程序员的天堂里生活,我在使用这些设计时属性时遇到了问题。
我围绕我的 ViewModel 创建了一个设计时包装器,它有一个无参数的构造函数(因此它可以由设计者创建)。在它的构造函数中,它使用 NSubstitute 来模拟注入到它继承的 ViewModel 中的所有依赖项。
在设计器中使用此设计时类会导致错误,如下所示:
Unable to cast object of type 'Castle.Proxies.XProxy' to type 'X'.
(将 X 替换为我注入的依赖项之一)。
您可以使用以下最少的代码集来重现该问题。
在 VS2013 中创建一个针对 .NET Framework 4.5.1 的 WPF 应用程序(它也可能发生在以前的版本中,我不知道),其中包含以下文件。
查看.xaml
视图模型.cs
设计时间视图模型.cs
XDependency.cs
编译、关闭并重新打开解决方案并在设计器中打开 View.xaml。它会工作得很好。然后,关闭设计器,重新构建解决方案,再次在设计器中打开 View.xaml,会出现以下错误:
Unable to cast object of type 'Castle.Proxies.XDependencyProxy_1' to type 'DesignTimeNSubstituteIssue.Services.XDependency'.
发生此错误时,设计器将停止使用指定的 DesignTimeViewModel,并退回到根本没有 DataContext。
解决此问题的唯一方法是关闭并重新打开解决方案。
我怀疑我知道发生了什么,但我不知道为什么会发生或如何解决它。
我认为在第一次编译时,设计者正在获取对程序集的引用并将其缓存。当第二次编译发生时,程序集被重建并且大部分是相同的,但是 NSubstitute 代理重新生成了一个Castle.Proxies.XDependencyProxy_2
不在第一个程序集中的新后缀(比如或其他东西),所以设计者不知道那个代理实际上实现了 XDependency 接口。这纯粹是我的猜测。
我可以通过不使用 NSubstitute 并手动模拟依赖项来创建一种解决方法,但我很想看看是否有人可以对这个主题有所了解。