问题标签 [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.
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) 上使用最新版本。有什么解决办法吗?
pex - 进行 Pex 单元测试时“超出路径范围”
我正在尝试在示例程序上生成 Pex 单元测试。我用Default.aspx
. 现在我打开default.aspx.cs
文件并将下面给定的代码添加到后面的代码中:
现在我右键单击default.aspx.cs
文件内部,单击“运行 Pex”。在 Pex 探索结果中,我收到一条消息“超出路径范围”。
我不明白——这是什么意思,我应该怎么做才能让我的单元测试通过?
pex - 将自定义对象与 Pex 测试框架一起使用
我正在尝试使用 Pex 和 Moles 测试框架来测试我的项目。
我对使用 Pex 进行参数化测试有一点想法。
如何对这些方法进行测试?
谢谢阿什瓦尼
moles - 该进程无法访问该文件,因为它正被另一个进程使用
我问这个问题是因为它是特定于痣的。在 Windows 7 64bit 上运行 VS2010,痣的 VsHost 停留在任务管理器中,导致此消息:
无法复制文件 该进程无法访问该文件,因为它正被另一个进程使用
解决方法:在任务管理器中杀掉进程Microsoft.Moles.VsHost.x86.exe
经常这样做是非常非常烦人的。我在 msdn 社交论坛上读到,这个问题将在某个时候得到解决(我记得帖子是 2010 年的,但找不到帖子)。
几乎每次我停止测试调试或调试时出现错误时都会发生这种情况。
关于这个问题有什么新的吗?
我非常希望 Moles 有朝一日会成为 Visual Studio 的标准部分,因为我非常喜欢这种 Typemocking!
moles - 所选类型不可见,无法由 Pex 运行
我正在运行 Pex 1.4.40602.0。当我尝试在内部“类型上运行 Pex 时,我得到一个“所选类型不可见,Pex 无法运行。”错误对话框。我试图将以下命令放在我的 Assembly.cs 文件中,但全部徒劳无功:
在这方面的任何帮助将不胜感激......
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 中看到这个问题。这是回归还是错误从未修复?
谢谢
c# - 痣和重构代码
我们正在我的公司开始一个新的绿地项目,并且已经决定我们将使用 Microsoft 的 Moles 框架来进行我们在单元测试中的所有模拟。理想情况下,我的经理不想引入任何其他 Mocking 框架,例如 NSubstitute 或 Moq 来使项目复杂化。但是我发现,由于 Moles 生成 Mocks 和 Stub 的性质,它不能很好地与重构工具一起使用。
例如,我们使用 resharper,如果我有以下接口,moles 将生成一个像这样的存根:
IMyInterface -> SIMyInterface
现在,如果我要将 IMyInterface 重构为另一个名称,例如:IMyNewInterface
然后在我的单元测试中,Stub 类显然不会被重构,因为它从根本上具有不同的名称。
我可以看到,一旦我们得到许多单元测试的排列组合,这将是一个大问题,重构将成为一场噩梦,而口头禅将是“不要改变任何东西!”
有没有人有类似的经验或知道可以处理 Moles 的重构工具?
感谢梅林和迈克。我的团队决定妥协并仅将 Moles 用于我们无法使用标准工具模拟的类型,然后将其他框架(例如 NSubstitute)用于其他所有内容。
c# - 如何告诉 Pex 不要存根具有具体实现的抽象类
我正在尝试使用 Pex 来测试一些代码。我有一个具有四个具体实现的抽象类。我为四种具体类型中的每一种创建了工厂方法。我还为抽象类型创建了一个,除了这个不错的线程解释说,Pex 不会使用抽象工厂方法,也不应该使用。
问题是我的一些代码依赖于全部存在的四种具体类型(因为创建更多子类的可能性非常非常小),但是 Pex 通过使用 Moles 创建存根来破坏代码。
如何强制 Pex 使用一种工厂方法(任何一种,我都不关心)来创建抽象类的实例,而无需为该抽象类创建 Moles 存根?是否有一个PexAssume
指令可以做到这一点?请注意,一些具体类型形成了一种树结构类型,所以说ConcreteImplementation
派生自AbstractClass
,并且ConcreteImplementation
有两个类型的属性AbstractClass
。我需要确保树中的任何地方都没有使用存根。(并不是所有的具体实现都有AbstractClass
属性。)
编辑:
看来我需要添加一些关于类结构本身如何工作的更多信息,但请记住,目标仍然是如何让 Pex 不存根类。
这里是抽象基类的简化版本及其四个具体实现。
我要测试的核心是Distill
方法,正如您所看到的,它有可能递归运行。因为在这个范式中存根AbstractClass
是没有意义的,它破坏了算法逻辑。即使尝试测试存根类也有些无用,因为除了抛出异常或假装它是Implementation1
. 我宁愿不必以这种方式重写被测代码以适应特定的测试框架,但是以永远不会存根的方式编写测试本身AbstractClass
是我在这里尝试做的。
例如,我希望我正在做的事情与类型安全的枚举构造有何不同。另外,我匿名发布了这里的对象(如你所知),并且我没有包括所有方法,所以如果你要评论告诉我这Implementation4.Equals(Implementation4)
是坏的,别担心,我知道它是这里坏了,但我的实际代码解决了这个问题。
另一个编辑:
这是其中一个工厂类的示例。它位于 Pex 生成的测试项目的工厂目录中。
在我的这些具体实现的工厂方法中,可以使用任何构造函数来创建具体实现。在示例中,useEmptyConstructor
参数控制要使用的构造函数。其他工厂方法具有类似的功能。我记得读过,虽然我不能立即找到链接,但这些工厂方法应该允许在每个可能的配置中创建对象。
visual-studio-2010 - 为什么运行 Pex 探索会导致忽略以前 Pex 生成的测试方法?
正在测试的代码:
测试项目中的 Pex 方法:
当我第一次在 上运行“Pex Explorations”时CheckValidFileWithPex(string content)
,会生成五种测试方法,它们的值如下content
:
- 无效的
- “”
- “\0\0\0\0”
- “测试”
- “\0\0\0\0\0”
但是,如果我再次运行“Pex Explorations”,在第二次执行之前没有对生成的测试、现有的测试项目代码或主项目进行任何更改,那么只有 4 个测试被列为生成的并且来自项目 3 的测试输入(“\ 0\0\0\0")丢失。
Pex生成的测试文件的源代码中还有这个案例的测试方法,但是我不明白为什么这个案例没有在Pex Exploration Results中列出。
感谢您的见解。