gpt4 book ai didi

moles - Pex 和 Moles - 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 22:23:11 24 4
gpt4 key购买 nike

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

编辑

    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;
}

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

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

最佳答案

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

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

我还建议考虑使用 Mole Stub 类型来进行单元测试注入(inject)。 Microsoft Moles Reference Manual是开始学习如何在单元测试中使用 Moles 的一个非常好的地方。当您创建参数化测试时,将为您的接口(interface)创建一个摩尔 stub 类型。只需为您的 stub 类型配置绕路,然后将其传递给参数化测试即可。

创建 stub 类型的绕道非常容易。我建议在测试项目中创建一个配置方法,配置常用的弯路。我通常添加一个枚举标志作为此方法的参数,这样我就可以轻松地告诉它在某些类型上创建哪些弯路,所有这些都在一次调用中完成。

示例枚举:

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

关于moles - Pex 和 Moles - 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8414948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com