我是Pex和Moles的新手我试图在我的代码上运行Pex,但我使用的是构造器注入。有没有办法指导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;
}我需要注入一个存根userRepository。调用_userRepository.GetById(id)时,Pex失败并返回NullReferenceException。我一直在使用Moq进行单元测试,但我想切换到pex和moles
我应该使用PexFactories来创建存根吗?
发布于 2011-12-08 02:48:47
尝试将Moles Stub类型传递给Pex生成的参数化测试。要创建参数化测试,右键单击您想要浏览的类,然后选择PEX > create parameterized Unit test。这将在测试类中生成一个包含参数的方法。单独的测试调用这个参数化测试,发送单独的测试参数。
当被测代码通过参数的方式使用依赖注入(它有一个接口类型的参数)时,Pex生成的参数化测试方法也将包含相同的接口类型参数。您可以编写自己的测试方法,这些方法也调用参数化方法,向它提供您自己的值,包括接口类型。只需确保不要将它们写入Pex生成的文件中!
我还建议在您的单元测试注入中使用Mole Stub类型。Microsoft Moles Reference Manual是开始学习如何在单元测试中使用Moles的一个非常好的地方。当您创建参数化测试时,将为您的接口创建一个moles存根类型。只需为您的存根类型配置弯路,然后将其传递给参数化测试。
创建存根类型的弯路非常简单。我建议在测试项目中创建一个配置方法,用于配置经常使用的弯路。我通常将枚举标志作为参数添加到此方法中,因此我可以很容易地告诉它在某些类型上创建哪些弯路,所有这些都在一个调用中完成。
示例枚举:
[Flags()]
public enum MoleConfigurations
{
MoleSqlClientObjects,
DisableDirectory_Exists,
DisableEventLogExtensions,
DisableInitializeDatabaseObjects,
DisableInitializeThreadingObjects,
DisableQueueExistingDataFiles,
DisableConstructor
}https://stackoverflow.com/questions/8414948
复制相似问题