问题标签 [ncrunch]
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.
unit-testing - NCrunch 与 Typemock 的集成无法运行测试
运行测试时,我从 NCrunch 收到以下异常。
版本详情
- VS2015 14.0.25420.01 更新3
- 类型模拟 8.5.0.2
- 测试框架 Galio/MbUnit 或 Nunit 3.43
从我可以阅读的文档来看,Typemock 应该由 NCrunch 自动获取,但这似乎没有发生。
欢迎任何帮助
c# - C# Nunit Moq 无法通过测试
我有这堂课:
我也有这个测试:
我不知道为什么,但我无法通过此测试。NCrunch 给我以下错误信息:
Moq.MockException :预期在模拟上调用一次,但为 0 次:m => m.DoSomethingWith("ID", .valueClass) 未配置任何设置。
执行的调用:
ISomeInterface.DoSomethingWith("ID", MyNamespace.ValueClass) 在 Moq.Mock.ThrowVerifyException(MethodCall 预期, IEnumerable
1 setups, IEnumerable
1 actualCalls, Expression 表达式, Times times, Int32 callCount) 在 Moq.Mock.VerifyCalls(Interceptor targetInterceptor, MethodCall 预期, Expression 表达式, Times times) at Moq.Mock.Verify[T](Mock1 mock, Expression
1 expression, Times times, String failMessage) at Moq.Mock1.Verify(Expression
1 expression, Times times) at Tests.MyClassTest.GIVEN_AnID_AND_AValue1_AND_AValue2_WHEN_DoingSomeMethod_THEN_TheSomeInterfaceShouldDoSomething() 在 C:\MySourceCode\File 和行号在这里。
如您所见,Moq 似乎“没有看到”我的调用,可能是因为new ValueClass(value1, value2)
我怎样才能使这个测试通过或者我怎样才能改变我的设计以便更容易测试?我应该把它放在哪里new ValueClass(value1, value2)
?
编辑:
这是我应该在软件工程而不是 StackOverflow 上问的问题吗?这超出范围了吗?
c# - 带有.net标准/核心的NCrunch TestProjects无法正常工作
我在 vs2017 的测试环境中使用了 ncrun。
在某些项目中,我得到一个奇怪的异常,即项目无法解决
要重现,我执行以下步骤:
- 创建一个新的 .net 标准 1.4 项目
- 创建一个 .net core xunit 测试项目
- 在 xunit 项目中,我们添加对 .net 标准项目的引用
错误:
引用:
NCrunch:如果您在构建此项目时遇到问题,请查看 http://www.ncrunch.net/d...ng_project-build-issues ...... .\vs2017\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.targets (92, 5): 找不到 'C:\Users\BoasE\AppData\Local\NCrunch\50412\ 的项目信息8\dev\BLS_UserApi\src\BoundContextes\Subscriptions\ClassLibrary1\ClassLibrary1\ClassLibrary1.csproj'。这可能表明缺少项目参考。
备注:由于所描述的问题花费了我一些时间,而且例外情况并不明显,它与兼容性问题有关,我发布了这个以节省他们的时间。
c# - 如何在 ncrun 中进行并行测试
我有一套测试方法如下:
我希望测试需要 10 秒才能完成所有测试。
然而,它需要 20 秒,而不是 10 秒,也不是 40 秒。
谁能告诉我为什么会这样?
ncrunch 是否有任何配置文件或设置菜单。
我阅读了https://www.ncrunch.net/documentation/concepts_parallel-execution但找不到任何选项。
c# - 我可以使用 NUnit 和 NCrunch 通过预处理器指令测试多个构建配置吗?
我正在为一些具有多个 API 版本的软件编写 API 的包装库,并且在多个平台之间同时但单独开发的许多共享调用。随着时间的推移,他们甚至已经合并平台以使用相同的代码库,只是在不同的命名空间和 *.exe 构建下。
我通过编写一个单一的代码库来做到这一点,然后通过构建配置使用预处理器指令和条件编译符号来选择性地使用某些代码进行构建。大约 90% 的代码实际上可以在版本和平台之间重用,所以这很有帮助。在被测项目端一切正常。
但是,我在使用 NUnit 和 NCrunch 对该项目进行单元测试时遇到问题。我创建了相同的构建配置来加载正确的常量并为集成测试项目创建正确的构建文件夹。但是,我注意到两个奇怪的问题:
NUnit 似乎忽略了集成测试项目中的预处理器指令。例如,在下面的示例中,无论配置如何(例如 BUILD_Bar_2015=true),第一行代码总是被命中(BUILD_Foov16=true),即使在 Visual Studio 中看起来所需的行集(对应于当前配置变量) 是唯一一个活跃的:
/li>此外,似乎当我通过 NCrunch 运行测试时,它只使用与列出的第一个配置创建的构建相对应的 *.dll(例如,它总是测试为 Foo.exe v16 编译的 *.dll。
在我看来,这两个问题是相关的。我想知道 NUnit 和/或 NCrunch 是否无法处理这样的设置,或者是否有一种特殊的方式我应该处理这种独特的设置?
我更大的问题是 #2,即 NCrunch 似乎仅在从第一个配置构建的 *.dll 上运行 NUnit,这使得无法测试任何其他配置。也许这是项目依赖项的问题?(上面示例中的路径是我通过 API 与之交互的程序,而不是我的 *.dll 项目。)
unit-testing - NCrunch 和 FakeItEasy.OutAndRefParametersConfigurationExtensions
我有一个带有 NUnit 测试套件的代码库,我使用 Resharper 单元测试会话和 NCrunch 运行它。
我的一项测试需要FakeItEasy.OutAndRefParametersConfigurationExtensions
. 大多数情况下它都可以工作,但偶尔 NCrunch 会因错误而失败:
System.TypeLoadException:无法从程序集“FakeItEasy,版本=1.21.0.0,文化=中性,PublicKeyToken=eff28e2146d5fd2c”加载类型“FakeItEasy.OutAndRefParametersConfigurationExtensions”。
- 在 NCrunch 中重新运行测试总是会立即修复它。
- 我在任何其他测试中都没有遇到这种错误
- Resharper 单元测试运行器根本没有任何问题。
- 我觉得失败通常似乎与 git jump、Solution Clean 或 NCrunch“重新同步”有关
有什么想法和/或我可以做些什么来使这些误报消失吗?
c# - 为什么我的 Rx.NET observable 似乎产生了它的整个序列两次?
我有一个随机失败的单元测试,我无法解释。这涉及使用 Rx.NET 的可观察序列和我为转换序列而制作的扩展方法。首先,让我展示一下测试是如何失败的:
好的,你看,我得到整个序列两次而不是一次。这是测试:
SubscribeAndWaitForCompletion()
是一个扩展方法,定义如下:
您会注意到那里有一个.Trace()
调用,扩展方法内部还有另一个调用,这会通过 NLog 生成有关可观察序列的日志记录,这是跟踪输出:
这几乎是我所期望的。我从我的扩展方法内部得到一个跟踪输出,然后在扩展方法外部的转换序列上得到另一个。正如预期的那样,序列中的每个元素恰好流过系统一次。然而,我在测试中两次捕获了整个序列。
我最好提供扩展方法,以便我们可以看到它的作用。这里是:
所以这里的目的是从数据流中挑选出当前传感器的读数。读数采用 Znn 格式(字面“Z”后跟一个或两个十进制数字后跟一个换行符。扩展方法将原始输入字符序列转换为表示当前读数的整数序列。过滤器使用 RxBuffer
运算符来缓冲它认为可能是有效的传感器读数的字符。当看到“Z”字符时打开缓冲区,当看到非数字字符时关闭缓冲区。通过在正则表达式中匹配和解析进行双重检查,然后如果result 传递它转换为整数并在输出序列中发出的所有内容。
谁能明白为什么我的结果中可能会出现双重数据?
更新:与调查相关的附加代码。
Trace
扩展方法可在 NuGet 包TA.ASCOM.ReactiveCommunications
(我的一个)中找到,但来源如下:
我怀疑我可能从其他人那里复制了这段代码,但我似乎没有记下谁。
c# - NCrunch 在执行 File.ReadAllText 时抛出 System.IO.DirectoryNotFoundException
我在使用 NCrunch 时遇到问题,当我测试尝试访问文件系统的方法时出现以下异常。
这是 EmailAPI 项目中的代码,我尝试测试的方法是调用以获取 html 文件的内容。这段代码在运行 api 时运行良好,但是当单元测试到达这里时,就会抛出异常。
EmailAPI 项目结构:
因此,在正在测试的项目中,当我执行上述代码时,应用程序似乎知道我正在从项目的根目录引用此文件。当我调用该方法时单元测试项目运行代码时,它似乎试图从 NCrunch 构建输出 bin 文件夹中找到文件路径。有人知道我怎样才能让它工作吗?
我已经对使用 IHostingEnvironment 并将 ContentRoot 设置为 EmailAPI 项目的根目录进行了一些研究,但我不确定如何获取相对于我的 EmailAPI.Tests 项目的目录路径。我还研究了使用 System.IO.Abstractions 模拟文件系统,但我试图避免将文件系统接口传递给构造函数(因为我使用的策略模式使它有点混乱,我想避免代码更改严格用于测试目的。)虽然找到了一个不错的解决方案,但到目前为止还没有运气。
fluent-assertions - FluentAssertions 在断言失败时抛出 ArgumentOutOfRangeException(可能与 NCrunch 相关)
我正在使用在 NCrunch 3.14.0.1 下运行的 FluentAssertions 5.3.0。当测试失败时,我经常看到这个错误,因为 FluentAssertions 尝试生成报告消息......
System.ArgumentOutOfRangeException:startIndex 不能大于字符串的长度。参数名称:FluentAssertions.CallerIdentifier.DetermineCallerIdentity() 处 FluentAssertions.CallerIdentifier.DetermineCallerIdentity() 处 FluentAssertions.CallerIdentifier.ExtractVariableNameFrom(StackFrame frame) 处 System.String.Substring(Int32 startIndex, Int32 长度) 处的 startIndex。 AssertionScope.FailWith(String message, Object[] args) at FluentAssertions.Numeric.NumericAssertions`1.Be(T expected, String because, Object[] becauseArgs) at TableTests.ConsolidatedMovementsTester.AlternativingMovementStatesAreRecognised() in ...test.cs
错误是零星的——如果重新运行测试,它通常会消失(在这种情况下,会显示正确的错误报告)。我在 FluentAssertions 和 NCrunch 的最后几个版本中看到了这一点,它出现在多台机器上(所有机器都运行某种 Visual Studio 2017 Professional)。
这是最近一个叫我咬我的例子……
其中results是 POCO 的 ImmutableArray
在这种情况下,右键单击失败的测试并在 ncrunch 窗口中选择“在新的测试运行器中重新运行”,导致测试重新运行并且 FA 发出正确的报告。
任何人都可以为此提出解决方法吗?