2

我是 PEX、Visual Studio 和 .NET 世界的新手,但我为 C# 生成了一些测试。我已经读过,PEX 还可以分析用任何 .NET 语言编写的 .NET 程序,所以目前我正试图让 PEX 与 C 一起工作(我已将代码存储在 C++ 项目中。这是正确的方法吗?) . 由于没有适用于 C++ 的 Visual Studio PEX 插件,我尝试使用命令行界面。在教程“使用 Microsoft Pex 进行参数化单元测试”中说,我应该有一个以 .dll 或 .exe 结尾的“.NET 程序集”,其中包含一个用 PexClassAttribute 注释的类和用 PexMethodAttribute 注释的公共方法。由于本教程仅提供了 C# 示例,因此我尝试在 .exe 上运行 PEX,而无需任何注释。所以我在 Visual Studio 中编译了我的代码,得到了我的汇编代码。exe 并尝试在其上运行 PEX。我收到以下错误:

Microsoft Pex v0.94.51006.1 -- http://research.microsoft.com/pex --
v4.0.30319
Copyright (c) Microsoft Corporation 2007-2010. All rights reserved.

unexpected error: error while loading of 'light' (currently running
with 4 bytes/pointer).
     LAUNCHER FAILED
unexpected failure: error while loading assembly (-1006 - 0xfffffc12)

所以我有以下问题:

  1. 是否可以将 PEX 与 C 一起使用?或者我必须将我的代码转换为 C#?
  2. 看起来我的 light.exe 不是“.NET 程序集”。如何从 C 代码生成“.NET 程序集”?
  3. 我收到错误消息是因为我的程序集格式错误还是因为我没有注释代码?(由于错误消息,第二个对我来说似乎不太可能。我希望类似“应用所有过滤器后未找到任何探索;您是否忘记了 [PexClass] 或 [PexMethod] 属性?”)。
  4. 如果错误不是由于缺少注释或程序集格式错误,那么根本原因是什么?
  5. 如何在 C++ 中使用 PexClassAttribute 注释类?我需要哪些库以及生成装配的过程如何工作?
4

1 回答 1

3

Pex 仅适用于 .NET 程序集。它可以与任何 .NET 语言一起使用,但 C 不是一种语言——即使是这样,它仍然只能在为 CLR 编写的纯 C 代码上工作,而不是在任何本机 C 代码(你的代码)上工作。

因此,将 C 代码作为 C++ 项目加载并没有帮助,因为即使 C++ 代码也无法被 Pex 分析,除非它以 CLR 为目标。

于 2012-09-04T19:58:03.587 回答