问题标签 [automocking]

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 投票
2 回答
699 浏览

c# - 如何使用 AutofacContrib.NSubstitute 监视被测类

我正在使用 NSpec 框架、AutofacContrib.NSubstitute v3.3.2.0、NSubstitute v1.7.0.0(目前最新版本为 1.8.2)的类库项目中运行单元测试。

Class Under Test实例是用 构建的,AutoSubstitute以便自动模拟所有需要的依赖项。

如果工作正常,我的被测类在某些时候会调用它的基类方法之一,并带有一些特定的输入参数(基类不在我的控制范围内):

因此,对于测试期望,我需要检查(spy)该实例是否调用了基本方法:

这是问题所在:当我尝试这样做时,在运行时 NSubstitute 抱怨我只能Received()针对使用Substitute.For<>(). 我还快速检查了 AutofacContrib.NSubstitute 源代码,但我找不到通过自动模拟获取实例并同时以某种方式将其包装在间谍对象或类似对象中的方法。

我还认为这可能Substitute.ForPartsOf<>()会有所帮助,但在 NSubstitute v1.7.0 中似乎找不到该方法。

为了完整起见,这里是 NSubstitute 完整错误:

NSubstitute 扩展方法如 .Received() 只能在使用 Substitute.For() 和相关方法创建的对象上调用。

0 投票
1 回答
507 浏览

autofac - 为什么这个 Autofac 模拟的生命周期被安排在一个简单的 MSpec 测试中?

我有一个与 MSpec 一起使用的基类,它提供了围绕 AutoMock 的便捷方法:

有时,在尝试像这样检索 Mock 时会发生异常:

这是一个例外:

System.ObjectDisposedExceptionInstances 无法解析,并且无法从此 LifetimeScope 创建嵌套生命周期,因为它已被释放。

我猜这与 MSpec 运行测试的方式(通过反射)有关,并且有一段时间没有主动引用 AutoMock 使用的底层生命周期范围内的任何对象,这会导致生命周期范围得到处置。这里发生了什么,我有什么简单的方法可以防止它发生吗?

0 投票
1 回答
1756 浏览

c# - 如何将 Lazy<> 与 AutoMock (Moq) 一起使用

我们正在使用 Autofac.Extras.Moq.AutoMock。现在我有一个使用 Lazy<> 的构造函数依赖项

为了测试MyService,我们需要模拟Lazy<Dependency>.

我正在尝试这个

这是测试运行器返回的异常:

初始化方法 Tests.MyServiceTests.MyTestInitialize 抛出异常。System.InvalidCastException:System.InvalidCastException:无法转换类型为“System.Lazy 1[IDependency]' to type 'Moq.IMocked1[System.Lazy`1[IDependency]]”的对象。

那么,如何使用 automock 传递 Lazy<> 模拟对象。

0 投票
1 回答
175 浏览

javascript - 如何永远不要开玩笑地模拟特定模块?

特别是我们的代码库在很多地方都使用了下划线,我从不想模拟下划线。我知道我可以jest.unmock('underscore');在每个与下划线交互的测试中。有没有办法在全球范围内取消下划线?

0 投票
1 回答
1922 浏览

c# - 使用 mock.Provide() 设置委托工厂,在 SUT 构造函数中使用

我正在尝试测试一个类的行为,当它通过委托工厂传递一个存根对象时。我制作了一个测试版本,其中所有类的依赖项(工厂除外)都作为 Mock 对象传递,并且它按预期工作。现在我正在尝试使用 AutoMock 让容器自动创建模拟。

我在使用 mock.Provide() 在 ClassUnderTest 的构造函数中传递委托工厂的具体值时遇到问题。(就像这个评论所暗示的)

我正在测试的课程:

业务逻辑模块:

测试类:

}

如果有任何迹象表明我做错了什么,我将不胜感激。我错过了什么?怎么可能修好?这是一个简单的语法修复还是我的测试方法有问题?

在此先感谢您的时间。

0 投票
0 回答
917 浏览

qt - Qt5 和 CMake:为 AUTOMOC 添加标头

带有 CMake 的 Qt 在链接过程中经常会导致麻烦。

在阅读了几篇文章并尝试后,我发现 AUTOMOC 采用了给出的源文件,add_executable但忽略了我在给出的包含文件夹中的头文件include_directories( inc )。将标头文件添加到add_executable构建后成功。

但是告诉AUTOMOC头文件的正确方法是什么?

在我的 CMake CMakeLists.txt我使用

0 投票
1 回答
1155 浏览

c# - 使用 FakeItEasy 创建类并自动初始化依赖项

是否可以使用 FakeItEasy 创建一个正在测试的类,其中在构造函数中声明的所有依赖项都使用 fakes 自动初始化?

想象一下这个类:

然后我在测试设置中创建所有假对象,并用这些假对象构建我的测试类:

但我在 Java 世界中看到,使用 Mockito 和 Dagger 2 时,您可以执行以下操作:

并且模拟的类会用假货自动初始化。在 C# 中是否有与 FakeItEasy 等效的过程或函数?

0 投票
2 回答
1122 浏览

c# - 当构造函数具有使用 Func 的依赖项时,Moq CreateInstance 失败

我们将 Autofac 用于我们的 IOC,并发现使用该Func<T>方法可以获得很大的性能提升(在负载下),因为这些依赖关系在使用之前不会得到解决,并且在某些情况下某些依赖关系不会被使用。

我们还使用 Moq 进行一些单元测试。

这个时候就炸了——System.NullReferenceException : Object reference not set to an instance of an object.

任何人都知道如何告诉 Moq 与 Func 依赖关系很好地发挥作用?

请注意,如果我更改Func<IRarelyGetUsed>IRarelyGetUsed没有例外。

编辑:原来 nuget 包已经很老了 - 更新包后,https://github.com/tkellogg/Moq.AutoMocker它现在可以工作了。

然而,还有一个问题需要解决——

尝试设置上述方法的结果会导致 -Unable to cast object of type 'System.Linq.Expressions.InstanceMethodCallExpressionN' to type 'System.Linq.Expressions.InvocationExpression'

编辑2:

上面的方法现在可以工作了,但是它需要同时设置Func<IRarelyGetUsed>IRarelyGetUsed- 如果只需要做一个就好了,否则每次测试都会有更多的开销。

0 投票
1 回答
109 浏览

jestjs - 访问自动模拟函数的 .mock 属性

我有这个代码:

模拟函数是:

模块的模拟在__mocks__目录中。

a.x()调用模拟函数,但a.x.mock未定义。

这怎么可能?房产在哪里.mock

0 投票
1 回答
1253 浏览

c# - `Ploeh.AutoFixture` 和 `AutoFixture` 有什么区别?

Ploeh.AutoFixture和 和有什么不一样AutoFixture

我有一个无法使用的项目 using AutoFixture;

但是,我必须使用 using Ploeh.AutoFixture

这两者有什么区别,利弊是什么?

但是,我还发现了另一个 nuget 包,它使我只能添加using AutoFixture;。什么是最好的选择?

我在stackoverflow中找不到答案。任何答案都会丰富社区。

先感谢您。