问题标签 [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 回答
1048 浏览

vb.net - 针对类的 NSubstitute 测试 (VB.net)

首先,我是单元测试的初学者。对于我的测试,我想使用 NSubstitute,所以我阅读了网站上的教程以及 Richard Banks 的模拟比较。它们都在针对接口进行测试,而不是针对类进行测试。声明是“通常这个[替换]类型将是一个接口,但你也可以在紧急情况下替换类。”

现在我想知道针对接口进行测试的目的。这是来自 NSubstitute 网站的示例界面(请注意,我已经在 VB.net 中转换了 C# 代码):

这是来自网站的单元测试(在 NUnit-Framework 下):

好的,这行得通,单元测试将成功执行。但是这有什么意义呢?这不测试任何代码。Add -Method 可能有任何错误,在针对接口进行测试时不会检测到 - 如下所示:

Add -Method执行除以零,因此单元测试应该失败 - 但由于针对接口 ICalculator 进行测试,测试成功。

你能帮我理解吗?它有什么意义,不是测试代码而是测试接口?

在此先感谢迈克尔

0 投票
1 回答
813 浏览

c# - 测试事件监听器

在我的代码中:

我想测试GetStudent方法会调用,所以我尝试了

但测试坏了: 说:

Application.UnitTests.Form1Tests.ctor_whenviewbuttonclick_callsviewButtonClickevent: NSubstitute.Exceptions.ReceivedCallsException : 预期会收到匹配的呼叫:GetStudent(Student) 实际上没有收到匹配的呼叫。

我在这里做错了什么?

0 投票
2 回答
1004 浏览

ioc-container - 使用 LightInject 和 Nsubstitute 进行自动模拟,怎么样?

我对这两个库都是新手,在将它们用于大型项目之前,我需要澄清我的单元测试中低代码工作量自动模拟的选项。

在 Google 上花了一些时间后,我得出的结论是,与其他一些 IOC/Mocking 产品配对不同,LightInject+Nsubstitute 没有现成的插件库来简化在一个单元的排列阶段的无操作默认模拟的声明测试。

我已经阅读了 LightInject 文档,了解如何使用临时增强的模拟对象覆盖 LightInject 容器,仅用于单元测试的范围,但是单元测试可能涉及的所有无操作默认隔离模拟呢?有没有办法在 LightInject 容器中自动创建它们?

我正在寻找的内部 IOC 容器行为是:

看起来 LightInject 的 IProxy 和 Interceptors 提供了一些内部模拟对象构建块,但相比之下 Nsubstitute 库功能齐全。

澄清我的意思是默认不做任何模拟和增强模拟。

显然,第二种增强类型的模拟将需要在每个单元测试中本地制作。

0 投票
2 回答
385 浏览

c# - 将包括 NSubstitute 代码在内的 C# 语句转换为 VB.net

在阅读 NSubstitute 教程时,我将用 C# 编写的示例转换为 VB.net 以了解其功能,但我需要您对这些(不相关的)语句的支持,尽管我非常小心,但我无法转换:

1.

2.

注意: foo 是从一个接口派生的对象,该接口具有一个名为“SayHello”的 void 方法

3.

注意:引擎是从这个接口派生的对象:

4.

5.

6.

我希望在您的支持下,我能够自己转换剩余的语句。

先感谢您

迈克尔

0 投票
0 回答
221 浏览

c# - 测试 Arg.Any 任务

我正在尝试测试调用方法的顺序。我遇到的问题是我似乎找不到模拟 Task 对象的好方法。

我正在使用NSubstituteEntity Framwork 6。这就是我的代码的样子。

为了进一步强调我需要回答的内容,我应该将其插入 Arg.Any<>。

0 投票
0 回答
1257 浏览

c# - 是否可以设置 NSubstitute 来执行任何通过的委托

我有以下界面

现在我想模拟实现,以便它执行它作为参数获得的委托。第一种方法非常简单:

但是我对第二个的通用实现有疑问。是否可以用那个 Func 做一些事情,或者我必须为每个 T 做一个设置?恐怕根据那个问题这是不可能的,但我不是 100% 确定。这就是我现在所做的:

我在每个测试方法中调用这个函数。但我真的很想把它放在设置中。

0 投票
1 回答
840 浏览

c# - 表达式导致模拟存储库返回 null

我正在尝试测试一种服务方法,但为了做到这一点,我必须模拟我的 ReportRepository。一切正常,除了对 Include 方法的调用使模拟返回 null。

以下返回预期的报告:

但该服务实际上执行以下操作:

问题是,当我在我的模拟中包含“包含”方法时,会返回 null 而不是预期的报告,因此我的测试会中断NullReferenceException

那么如何在我的模拟中包含“包含”方法?

我正在尝试使用流利的存储库,因此它们的设置有所不同。以下许多代码发生在抽象的通用类中,但我将其删除以缩短问题长度。

0 投票
1 回答
1200 浏览

c# - 使用 NSubstitute 的 AutoFixture 是否可以/支持从代理接口返回自动值

最近,在尝试将AutoFixture 作为 NSubstitute 自动模拟容器时,我遇到了在实现中似乎令人惊讶的缺陷。尽管替代似乎是为指定为接口类型的构造函数/工厂参数自动生成的,但生成的替代/模拟似乎并没有像我预期的那样自动配置为返回通过夹具指定的自动值。

为了说明我认为开箱即用的方法,我在下面创建了一个简单的测试。

如果我期望 AutoNSubstituteCustomization 实现中不包含某些内容,那么这样的事情是否难以实现。有没有其他人朝这个方向迈进。任何指针都会有所帮助。

0 投票
2 回答
4882 浏览

c# - 实体框架 6 单元测试 (NSubstitute) - 如何测试具有子对象的对象在未请求子对象时不返回子对象

我有一种使用实体框架上下文获取雇主的方法(延迟加载已禁用)。有时我希望包括员工,有时我不希望在我的数据访问类中有以下代码:

从关于如何使用 NSubstitute 替换 EF 上下文返回的几个问题中,我在我的测试项目中有这个扩展方法来连接 DbSet 调用以进行替换(特别是NSubstitute DbSet / IQueryable<T>):

然后使用它来初始化测试类中的一组替代雇主:

所以,我现在有一个看起来像这样的测试:

此测试失败Assert.IsNull(actualEmployee);

在实际使用中,GetEmployer 将返回一个没有 Employee 孩子的 Employer。

但是,因为我用 Employee 替换了 Employer(因为这是我正在测试的!)该方法返回具有 Employee 的替换。

我该如何测试呢?

或者,我测试不正确?

我是否应该改用没有员工的雇主,因为这是上下文将返回的内容?

但这不是让测试毫无意义吗!?!

我在想自己在这里圈子......

0 投票
1 回答
610 浏览

unit-testing - 如何在 NSubstitute 模拟中使用 MS Fakes 垫片?

这个 SO 问题解决了“可以”,但没有显示“如何”。我坚持让它启动并运行。任何人都可以提供一个例子吗?我试过了

我想模拟 Foo(string s),这取决于抽象属性 Counter。我想模拟 Foo(string s) 的原因是因为我不想为 Counter 和 Foo(int n) 提供定义,因为验证码只使用了 Foo(string s) 。

方法一:

方法二:

两者都不起作用,调用原始类代码而不是 shim 代码。谢谢。