首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pex & Moles - Dependencey注射液

Pex & Moles - Dependencey注射液
EN

Stack Overflow用户
提问于 2011-12-07 19:59:20
回答 1查看 493关注 0票数 3

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

编辑

代码语言:javascript
复制
    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;
    }

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-08 02:48:47

尝试将Moles Stub类型传递给Pex生成的参数化测试。要创建参数化测试,右键单击您想要浏览的类,然后选择PEX > create parameterized Unit test。这将在测试类中生成一个包含参数的方法。单独的测试调用这个参数化测试,发送单独的测试参数。

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

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

创建存根类型的弯路非常简单。我建议在测试项目中创建一个配置方法,用于配置经常使用的弯路。我通常将枚举标志作为参数添加到此方法中,因此我可以很容易地告诉它在某些类型上创建哪些弯路,所有这些都在一个调用中完成。

示例枚举:

代码语言:javascript
复制
[Flags()]
public enum MoleConfigurations
{
    MoleSqlClientObjects,
    DisableDirectory_Exists,
    DisableEventLogExtensions,
    DisableInitializeDatabaseObjects,
    DisableInitializeThreadingObjects,
    DisableQueueExistingDataFiles,
    DisableConstructor
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8414948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档