如何配置Pex以尊重代码合同?

Jim*_* G. 7 pex .net-4.0 code-contracts visual-studio-2010-sp1

鉴于以下示例代码,我如何配置Pex以尊重我的代码合同?

    public static IEnumerable<User> Administrators(this UserGroup userGroup)
    {
        Contract.Requires(userGroup != null);
        Contract.Requires(userGroup.UserList != null);

        return userGroup.UserList.Where(ul => ul.IsAdmin == true);
    }
Run Code Online (Sandbox Code Playgroud)

当前问题:当我运行Pex时,它仍然会生成违反指定代码契约的测试用例.

仅供参考:以下是我的csproj文件中的"代码合同"设置.


编辑:在SP1中有什么破坏

Joh*_*las 4

首先,您需要使用 Requires 的类型化版本

使用 ArgumentNullException 作为 T

此外,在您的项目属性中,您需要告诉代码契约使用标准重写器。不要在失败时单击“断言”;)

Contract.Requires<ArgumentNullException>(i != null);
Run Code Online (Sandbox Code Playgroud)

那么你的代码将抛出一个 argumetn null 异常,并且 pex 可以向你的 pexmethod 添加一个属性来表示允许抛出它,并将创建一个抛出异常的通过测试

然后您可以推广这些并保存单元测试