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

sharepoint - SharePoint 行为类型 - 运行 Pex 探索错误 (System.Moles 4.0.0.0)

我正在关注关于 pex 和痣的教程(http://research.microsoft.com/en-us/projects/pex/pexsharepoint.pdf)。它一岁了,但一切都很好,直到我将 Mole 类型更改为 Behaved 类型。一旦我这样做了,'Run Pex Explorations' 命令开始抛出这个异常:

无法加载文件或程序集“System.Moles,Version=4.0.0.0,Culture=neutral,PublicKeyToken=0ae41878053f6703”或其依赖项之一。该系统找不到指定的文件。

我尝试了多种解决方案(包括Moles 和 SharePoint 行为类型)。我还尝试为 System 4.0.0.0 程序集生成 Moles,但由于多个“找不到合适的方法来覆盖”错误而失败。

我在 pex (0.94) 和 moles (1.0.0.0) 上使用最新版本。有什么解决办法吗?

0 投票
1 回答
1246 浏览

pex - 进行 Pex 单元测试时“超出路径范围”

我正在尝试在示例程序上生成 Pex 单元测试。我用Default.aspx. 现在我打开default.aspx.cs文件并将下面给定的代码添加到后面的代码中:

现在我右键单击default.aspx.cs文件内部,单击“运行 Pex”。在 Pex 探索结果中,我收到一条消息“超出路径范围”。

我不明白——这是什么意思,我应该怎么做才能让我的单元测试通过?

0 投票
1 回答
127 浏览

pex - 将自定义对象与 Pex 测试框架一起使用

我正在尝试使用 Pex 和 Moles 测试框架来测试我的项目。

我对使用 Pex 进行参数化测试有一点想法。

如何对这些方法进行测试?

谢谢阿什瓦尼

0 投票
0 回答
894 浏览

moles - 该进程无法访问该文件,因为它正被另一个进程使用

我问这个问题是因为它是特定于痣的。在 Windows 7 64bit 上运行 VS2010,痣的 VsHost 停留在任务管理器中,导致此消息:

无法复制文件 该进程无法访问该文件,因为它正被另一个进程使用

解决方法:在任务管理器中杀掉进程Microsoft.Moles.VsHost.x86.exe

经常这样做是非常非常烦人的。我在 msdn 社交论坛上读到,这个问题将在某个时候得到解决(我记得帖子是 2010 年的,但找不到帖子)。

几乎每次我停止测试调试或调试时出现错误时都会发生这种情况。

关于这个问题有什么新的吗?

我非常希望 Moles 有朝一日会成为 Visual Studio 的标准部分,因为我非常喜欢这种 Typemocking!

0 投票
2 回答
665 浏览

c# - 在 EntityFramework 4.1 中查询数据库时如何使用 Moles 来破坏 DbContext?

我正在使用 Entity Framework 4.1 进行数据库访问,并希望对以下代码进行单元测试:

我正在使用 Moles 来消除数据库依赖关系,但是我被卡住了。我应该开始研究实体框架中的哪一点。

我正在关注这个示例,但它适用于 LINQ-To-SQL。

我还在考虑调试/跟踪实体框架,以确定在调用数据库之前要拦截哪个函数。但是,似乎没有可供 Entity Framework 4.1 跟踪的源代码。见讨论

谁能指导我应该在 DbContext 中删除哪些功能,以便我可以获取 EmployeeProfiles 列表?

0 投票
0 回答
187 浏览

moles - 所选类型不可见,无法由 Pex 运行

我正在运行 Pex 1.4.40602.0。当我尝试在内部“类型上运行 Pex 时,我得到一个“所选类型不可见,Pex 无法运行。”错误对话框。我试图将以下命令放在我的 Assembly.cs 文件中,但全部徒劳无功:

在这方面的任何帮助将不胜感激......

0 投票
0 回答
143 浏览

moles - Moles Generation - 不同名称空间中的相同类名

这个问题最初是在这里提出的:http ://social.msdn.microsoft.com/Forums/en-US/pex/thread/60972f1f-735a-474e-be84-40cda8006ffa?prof=required 。

我最近为 VS2010 安装了 Moles。我有具有相同类(相同名称)但在不同命名空间下的程序集。Moles 通过为这些类生成例如 MClassName 和 MClassName01 来解决这个问题。这在本地工作得很好。但是当其他人获得最新版本时,会重新生成痣,MClassName 变成 MClassName01,MClassName01 变成 MClassName,因此构建失败,直到所有单元测试再次修复。每次有人获得最新版本时,这是不可接受的。请提出解决方案。

当时的答案是,这是一个已知的错误,将在 2010 年 12 月的版本中修复。我仍然在 0.94.51023.0 中看到这个问题。这是回归还是错误从未修复?

谢谢

0 投票
2 回答
904 浏览

c# - 痣和重构代码

我们正在我的公司开始一个新的绿地项目,并且已经决定我们将使用 Microsoft 的 Moles 框架来进行我们在单元测试中的所有模拟。理想情况下,我的经理不想引入任何其他 Mocking 框架,例如 NSubstitute 或 Moq 来使项目复杂化。但是我发现,由于 Moles 生成 Mocks 和 Stub 的性质,它不能很好地与重构工具一起使用。

例如,我们使用 resharper,如果我有以下接口,moles 将生成一个像这样的存根:

IMyInterface -> SIMyInterface

现在,如果我要将 IMyInterface 重构为另一个名称,例如:IMyNewInterface

然后在我的单元测试中,Stub 类显然不会被重构,因为它从根本上具有不同的名称。

我可以看到,一旦我们得到许多单元测试的排列组合,这将是一个大问题,重构将成为一场噩梦,而口头禅将是“不要改变任何东西!”

有没有人有类似的经验或知道可以处理 Moles 的重构工具?


感谢梅林和迈克。我的团队决定妥协并仅将 Moles 用于我们无法使用标准工具模拟的类型,然后将其他框架(例如 NSubstitute)用于其他所有内容。

0 投票
1 回答
1634 浏览

c# - 如何告诉 Pex 不要存根具有具体实现的抽象类

我正在尝试使用 Pex 来测试一些代码。我有一个具有四个具体实现的抽象类。我为四种具体类型中的每一种创建了工厂方法。我还为抽象类型创建了一个,除了这个不错的线程解释说,Pex 不会使用抽象工厂方法,也不应该使用。

问题是我的一些代码依赖于全部存在的四种具体类型(因为创建更多子类的可能性非常非常小),但是 Pex 通过使用 Moles 创建存根来破坏代码。

如何强制 Pex 使用一种工厂方法(任何一种,我都不关心)来创建抽象类的实例,而无需为该抽象类创建 Moles 存根?是否有一个PexAssume指令可以做到这一点?请注意,一些具体类型形成了一种树结构类型,所以说ConcreteImplementation派生自AbstractClass,并且ConcreteImplementation有两个类型的属性AbstractClass。我需要确保树中的任何地方都没有使用存根。(并不是所有的具体实现都有AbstractClass属性。)

编辑:

看来我需要添加一些关于类结构本身如何工作的更多信息,但请记住,目标仍然是如何让 Pex 不存根类。

这里是抽象基类的简化版本及其四个具体实现。

我要测试的核心是Distill方法,正如您所看到的,它有可能递归运行。因为在这个范式中存根AbstractClass是没有意义的,它破坏了算法逻辑。即使尝试测试存根类也有些无用,因为除了抛出异常或假装它是Implementation1. 我宁愿不必以这种方式重写被测代码以适应特定的测试框架,但是以永远不会存根的方式编写测试本身AbstractClass是我在这里尝试做的。

例如,我希望我正在做的事情与类型安全的枚举构造有何不同。另外,我匿名发布了这里的对象(如你所知),并且我没有包括所有方法,所以如果你要评论告诉我这Implementation4.Equals(Implementation4)是坏的,别担心,我知道它是这里坏了,但我的实际代码解决了这个问题。

另一个编辑:

这是其中一个工厂类的示例。它位于 Pex 生成的测试项目的工厂目录中。

在我的这些具体实现的工厂方法中,可以使用任何构造函数来创建具体实现。在示例中,useEmptyConstructor参数控制要使用的构造函数。其他工厂方法具有类似的功能。我记得读过,虽然我不能立即找到链接,但这些工厂方法应该允许在每个可能的配置中创建对象。

0 投票
0 回答
258 浏览

visual-studio-2010 - 为什么运行 Pex 探索会导致忽略以前 Pex 生成的测试方法?

正在测试的代码:

测试项目中的 Pex 方法:

当我第一次在 上运行“Pex Explorations”时CheckValidFileWithPex(string content),会生成五种测试方法,它们的值如下content

  1. 无效的
  2. “”
  3. “\0\0\0\0”
  4. “测试”
  5. “\0\0\0\0\0”

但是,如果我再次运行“Pex Explorations”,在第二次执行之前没有对生成的测试、现有的测试项目代码或主项目进行任何更改,那么只有 4 个测试被列为生成的并且来自项目 3 的测试输入(“\ 0\0\0\0")丢失。

Pex生成的测试文件的源代码中还有这个案例的测试方法,但是我不明白为什么这个案例没有在Pex Exploration Results中列出。

感谢您的见解。