问题标签 [pex]

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 回答
449 浏览

c# - 为什么在单独运行时使用 HostType("Moles") 进行单元测试的断言会通过,但在使用一组测试运行时会失败?

我最近加入了 Pex 和 Moles 的潮流,以便使用许多静态、非虚拟、密封等元素来测试一些逻辑。最近,我开始看到一些我无法从一些测试中解释的行为.

我存根的接口的一些方法返回 void,因此我将存根设置为更新布尔变量以指示它们已被调用的委托。这就是我正在做的事情:

无论出于何种原因,如果我单独运行此测试,上述断言就会成功。但是,如果我将测试与程序集中的所有其他测试一起运行(使用 Visual Studio 的“在解决方案中运行所有测试”功能),第一个断言将失败。

我想知道为什么会发生这种情况,以及我需要改变什么来解决这个问题。

0 投票
2 回答
386 浏览

c++ - 最接近 Pex for Visual C++ 的是什么?

Pex 自动为 C# 代码生成单元测试。

C++ 代码有类似的东西(免费或商业)吗?

0 投票
1 回答
544 浏览

pex - 是否有 64 位版本的 Pex(学术许可证)?

Pex 的学术许可证似乎只有 32 位版本。

有64位版本吗?

0 投票
2 回答
200 浏览

generics - Pex 如何处理泛型?

Pex 如何处理泛型?

0 投票
2 回答
484 浏览

moq - Pex 和 Moq 一起工作吗?

有没有人试过这个?

我喜欢最小起订量,我喜欢 pex 正在做的事情,但没有一起尝试过。在我认为的大多数情况下,我更喜欢使用 moq 而不是痣,但我很想知道是否有人遇到了障碍?

他们玩得好吗?

0 投票
1 回答
188 浏览

pex - Pex:如何在参数化测试中表明我期望在某些条件下出现异常?

我刚刚开始使用 Pex 并遇到标题中描述的问题。似乎 Pex 生成或手动添加的任何参数化测试都会为导致引发异常的任何输入创建失败的测试用例。有没有办法让我指出某些输入应该引发异常,因此不会导致特定测试失败?

0 投票
1 回答
382 浏览

unit-testing - 使用 Pex、Contracts 和 QuickGraph 进行假阴性单元测试

每个人。我在合同、pex 和 quickgraph 之间有一个令人困惑的交互,非常感谢知识渊博的人提供的建议。我把它归结为一个复制案例,其中注释掉一个合同会使假阴性消失,但我无法在允许的时间内用调试器诊断它,因为主题代码(快速图)对属性有副作用- getters,意味着调试器在显示属性值时执行副作用,干扰实际执行顺序。

首先是一点背景,然后是细节,然后是一个可以下载和试用的项目的指针,如果您愿意深入研究的话!

我安装了 Pex & Moles

http://research.microsoft.com/en-us/projects/pex/downloads.aspx

和 .NET 4.0 的 CodeContracts

http://research.microsoft.com/en-us/projects/contracts/

我通过 nuget 下载了最新版本的 QuickGraph,它都是为 .NET 3.5 构建的。我将它修剪到我需要的最低限度,进入所有项目属性,将它们全部从 .NET 3.5 客户端配置文件更新到 .NET 4.0,修复了一个源中断更改(这是微不足道的,非常非常不可能与我的问题)。然后我转到每个项目页面上的 Code Contracts 选项卡并启用所有静态和动态选项。

http://quickgraph.codeplex.com/releases/view/55262

该项目有 192 个单元测试,其中许多是 Pex 生成的(非常好!)。要运行测试,请从

http://dl.dropbox.com/u/1997638/QuickGraph.zip

确保您有来自上述链接的 Pex & Moles 和 Contracts。打开解决方案,重建所有内容,然后在解决方案级别,“在解决方案中运行所有测试”(control-R,A)。一切都会过去的。然后转到 IImplicitUndirectedGraphContracts.cs 的第 49 行并取消注释大注释下的合同(由我插入)。一项测试 Prim12240WithDelegate 将失败。

该测试通过在 Edges 和 EdgeCount 的属性获取器中调用用户提供的委托来运行图形构造函数。可爱的。但是 IImplicitUndirecteGraphContracts.cs 第 49 行的 Contract 出了点问题。

这是一个假阴性,因为如果我注释掉这个合同,测试就通过了。在调试器中尝试遵循这一点时,它与在属性 getter 中创建边缘的时间有关。然而,我无法解开这个问题,因为调试器调用这些 getter,主题代码调用它们,合约代码调用它们,可能是静态的,也可能是动态的,我只是迷失了试图遵循它,并认为我会向那些比我更了解合同执行细节的人提出这个问题。

这是违规合同;将其注释掉会使单元测试成功:

0 投票
1 回答
481 浏览

c# - 代码合同失败示例 Graph.Remove(Edge e)

这是一个简单的图形操作方法,我用代码契约装饰了它。

确保声明无法证明,但我不明白为什么!我相信它声称在调用 Remove() 之后,边缘不再在边缘列表中,或者结果为假。如果结果为真,它不会声明图的状态。静态检查器不喜欢它,我还没有让 Pex 告诉我如何(尽管我可能只是不知道如何使用它)。

我相信这个例子中的锁是无关紧要的,但我会留下它以防万一。此外,OnRemoveEdge 的委托没有任何保证,但我现在隐含地假设它不会重新进入 Graph 代码。此外,假设是在它之后。

更新:我更改了代码以将事件处理程序 OnRemoveEdge()(但不是委托 OnBeforeRemoveEdge)移出锁定。但是,这对合约与线程相关的假设有什么作用呢?代码契约是否假设为单线程模型?嗯。

0 投票
1 回答
262 浏览

.net - 将 Microsoft Pex 与 Prism 复合应用程序一起使用

我正在我的 Prism 复合应用程序中实施单元测试,并尝试实施 Microsoft Pex ( http://research.microsoft.com/en-us/projects/pex/ ) 以加快这项任务。但是我遇到了很多与 Prism 相关的麻烦。尽管使用 Moles 来存根 Prism 实现,但我在执行此操作时遇到了很多错误和问题。

有人已经成功地将 Pex 与 Prism 应用程序一起使用了吗?

提前感谢您的回答

0 投票
1 回答
318 浏览

c# - PexAssert.Throws 在 PUT 中结合 Run Pex

当我创建一个调用被测类的方法的 PUT 并将其属性为 时PexMethod,“Run Pex”将使用此方法并为其创建自动生成的测试。

这仅在对方法的调用直接在 PUT 的主体中时才有效。

样本:

此 PUT 由“运行 Pex”使用:

“运行 Pex”不使用此 PUT :

我想表明对方法的调用总是抛出这个异常,与参数无关。

如何做到这一点?

一周前我已经在微软的官方 Pex 论坛上问过这个问题,但没有收到一个答案,因此我在这里做一个双重发布。

该问题可以重现如下:

  1. 有一个简单的解决方案,一个项目,一个类,一种方法。
  2. 右键单击该方法并选择运行 Pex。
  3. 在 Pex 探索结果中,右键单击任何条目并选择“保存测试...”。它将创建一个包含两个相关文件的新测试项目:<class-name>Test.cs<class-name>Test.<MethodName>.g.cs. 在第一个文件中,有 PUT,在第二个文件中是具体的测试方法,每个参数 Pex 选择一个。每次为第一个文件中包含 PUT 的方法运行 pex 时,都会自动重新创建第二个文件。
  4. 右键单击测试项目并选择“Pex”->“删除生成的单元测试”。这将从第二个文件中删除特定测试。
  5. 转到带有 PUT 的文件并将 PUT 重命名为任意名称。
  6. 返回到第 1 点的方法并再次右键单击并选择运行 Pex。
  7. Pex 将在名为“Test..g.cs”的测试项目中创建一个新文件。它使用与以前相同的 PUT,尽管您对其进行了重命名。
  8. 再次更改 PUT,保持名称不变,但将内容更改为我使用 PexAssert.Throws 的第二个示例。
  9. 再次,右键单击测试项目并选择“Pex”->“删除生成的单元测试”。
  10. 再次,右键单击第 1 点的方法并选择“运行 Pex”
  11. 打开测试项目中的两个 *.g.cs 文件,您将看到没有测试。这意味着,Pex 没有使用 PUT。那就是问题所在 :)