Pex和;摩尔 - 依赖注入

时间:2011-12-07 11:59:20

标签: moles pex pex-and-moles

我是Pex和Moles的新手。我试图在我的代码上运行Pex,但我正在使用Constructor注入。有没有办法指示Pex如何注入构造函数?

修改

    public UserLogic(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public int GetUsersAge(int id)
    {
        User user = _userRepository.GetById(id);
        DateTime DOB = user.DOB;
        DateTime now = DateTime.Today;
        int age = now.Year - DOB.Year;
        if (DOB > now.AddYears(-age)) age--;
        return age;
    }

我需要注入一个stub userRepository。调用_userRepository.GetById(id)时,Pex失败并出现NullReferenceException。我一直在使用Moq进行单元测试,但我想切换到pex和moles

我应该使用PexFactories来创建我的存根吗?

1 个答案:

答案 0 :(得分:1)

尝试将Moles Stub类型传递给Pex生成的参数化测试。要创建参数化测试,请右键单击要探索的类,然后选择 PEX>创建参数化单元测试。这会在包含参数的测试类中生成一个方法。各个测试调用此参数化测试,发送各个测试参数。

当被测代码通过参数使用依赖注入(它有一个接口类型参数)时,Pex生成的参数化测试方法也将包含相同的接口类型参数。您可以编写自己的测试方法,这些方法也可以调用参数化方法,为您提供自己的值,包括接口类型。请务必不要将它们写在Pex生成的文件中!

我还建议您使用Mole Stub类型进行单位测试注射。 Microsoft Moles Reference Manual是一个非常好的开始学习如何在单元测试中使用Moles的地方。在创建参数化测试时,将为您的界面创建一个moles存根类型。只需为存根类型配置绕行,然后将其传递给参数化测试。

创建存根类型的弯路非常简单。我建议在测试项目中创建一个配置方法,用于配置经常使用的弯路。我通常会添加一个枚举标志作为此方法的参数,因此我可以轻松地告诉它在某些类型中创建哪些弯路,一次性调用。

示例枚举:

[Flags()]
public enum MoleConfigurations
{
    MoleSqlClientObjects,
    DisableDirectory_Exists,
    DisableEventLogExtensions,
    DisableInitializeDatabaseObjects,
    DisableInitializeThreadingObjects,
    DisableQueueExistingDataFiles,
    DisableConstructor
}