问题标签 [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 投票
1 回答
1158 浏览

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, IEnumerable
1 source, Expression1 谓词)在 c:\develop\Clientmanagement\Clientmanagement.Tests\UnitTest1.cs:line 19 中的 Clientmanagement.Tests.UnitTest1.TestMethod1()

这是我的测试方法的样子

现在我的问题是是否可以IQueryable用 NSubstitute 替代方法?我的测试方法设置错了吗?

0 投票
1 回答
2369 浏览

c# - NSubstitute 清除When().Do()

NSubstitute 是否可以清除或删除以前的 .When().Do() 配置?

0 投票
3 回答
2262 浏览

c# - 在 C# 中自动创建对象母类

我正在使用Object Mother进行单元测试,我不想编写所有 OM 类 == 重复的类结构。是否可以创建一些会自动生成 OM 类的基本 OM 类?

这应该将所有属性创建为 public 和 CreateInstance 方法,该方法创建类对象并注入所有属性。可能吗?最佳做法是什么?或者可能是一些自动 T4 代码生成等。谢谢。

0 投票
0 回答
931 浏览

c# - 如何使用 nsubstitute 覆盖设置属性方法

在单元测试中,我在使用 nsubstitute 注册它们时替换了所有视图。但是,当我处理 1 个视图时,将 1 个属性(对象类型)设置为 null 时会引发错误。错误是“值不能为空。参数名称:集合”

作为一种解决方法,我想使用 nsubstitute 来拦截此属性的 set 方法,当参数为 null 时,要么忽略它,要么将其设置为其他值。

我尝试了很多变化,我认为 When..Do 是我需要的,但没有运气实现它。这是我的最后一次尝试:

仅供参考,这里是 nsubstitute 错误的堆栈跟踪:

0 投票
1 回答
2119 浏览

nsubstitute - NSubstitute:Arg.Do 不满足调用参数列表

对于下面的代码,我得到这个断言失败并且不知道为什么:

Assert.AreEqual failed. Expected:<2>. Actual:<0>.

0 投票
1 回答
579 浏览

c# - NSubstitute 中的 TargetInvocationException

我想编写一个测试检查我的抽象类构造函数是否正确处理无效参数。我写了一个测试:

这个测试没有通过,因为 NSubstitute 抛出 aTargetInvocationException而不是ArgumentException. 我寻求的实际例外实际上是其中InnerException的一个TargetInvocationException。我可以编写一个辅助方法,例如:

但我想,应该有某种通用的方法来解决这个问题。有吗?

0 投票
1 回答
1280 浏览

autofac - NSubstitute 和 Autofac - 断言没有按预期工作

我有一个具有以下课程的 Web API 项目。此类基本上是注册所有ApiController实例并设置DependencyResolver.

为了测试这个类实际上设置了所有 API 控制器,我有以下测试

当我运行这个测试时,我得到以下异常NSubstitute

这是令人困惑的输出。NSubstitute当实际呼叫和预期呼叫完全相同时,我不明白为什么不高兴。有什么线索吗?

0 投票
1 回答
2143 浏览

c# - NSubstitute 不处理内部属性

假设我有以下课程:

现在,我尝试使用 NSubstitute 进行模拟:

但这失败了:

来自程序集“DynamicProxyGenAssembly2,版本=0.0.0.0,文化=中性,PublicKeyToken=a621a9e7e5c32e69”的“Castle.Proxies.TestProxy”类型中的方法“get_Prop”没有实现。

我想添加NSubstitute[InternalsVisibleTo],但不幸的是我测试的程序集是签名的,NSubstitute不是Internals也不能是VisibleTo无符号的类。

我怎么解决这个问题?

0 投票
1 回答
275 浏览

c# - 存根/模拟 2 级在一个类中

我有一个无法测试的设置提供程序(企业遗留代码)。我正在尝试将设置提供程序包装在设置存储库中,以减少不可测试代码的数量。因此,我们将有 1 个使用 Settings 提供程序的方法,而不是 20 个方法。其余的实现 SettingsRepository 接口。

不过,之后我在进行测试时遇到了麻烦,这通常表明我做错了什么。

我希望你能帮助找出什么。

我使用统一注入存储库。我从存储库中获取内容的方式如下:

所以这就是问题所在。我可以使用nsubstitute模拟/存根 SettingsRepository 接口,但我需要做的实际上是模拟“设置”以设置 SecureCache 的返回。

有没有办法在 nsubstitute 中“深度模拟”所以我可以做类似的事情:

目前“设置”为空,我没有可以在那里模拟的任何东西。

我的后备解决方案是直接在 SettingsRepository 上添加所有设置字段,但我希望避免这种情况,因为它只会将不可测试的代码移动到解决方案的其他位置。

0 投票
1 回答
7594 浏览

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 并手动模拟依赖项来创建一种解决方法,但我很想看看是否有人可以对这个主题有所了解。