[英]Unit testing methods that have multiple complicated objects as parameters in MSTest
我目前正在开发一个项目,该项目具有作为参数的复杂对象(主要是Repository对象)。 测试必须使用MSTest完成。 在TestInitialize方法中创建对象是否是明智的方法,以便它们可以用作参数传递给测试方法中的实际方法的参数? 请建议更好的选择。
我附上了需要进行单元测试的方法的示例代码(Exectue()方法)
public class AddOrdersToDbCommand
{
private IOrdersRepository _ordersRepository;
private OrderSetting _ordersSetting;
public AddOrdersToDbCommand(IOrdersRepository ordersRepository, OrderSetting ordersSetting)
{
_ordersRepository = ordersRepository;
_ordersSetting = ordersSetting;
}
public void Execute()
{
OrderSetting modifyOrderSettings = _ordersRepository.Get(_ordersSetting.Id);
modifyOrderSettings.Name = _ordersSetting.Name;
modifyOrderSettings.Status = _ordersSetting.Status;
modifyOrderSettings.UpdatedBy = _ordersSetting.UpdatedBy;
modifyOrderSettings.UpdatedDate = _ordersSetting.UpdatedDate;
_ordersRepository.SaveOrUpdate(modifyOrderSettings);
_ordersRepository.DbContext.CommitChanges();
}
}
您应该使用Mocks (使用像Moq这样的Mocking框架)来提供任何依赖对象。 这样,您只能隔离和测试当前正在测试的内容。
如果你真的必须创建存根对象,我更喜欢使用辅助类。 我有TestDataGenerator.cs类。 在那里,您可以拥有一组用于生成对象的静态方法。
然后使用示例将成为TestDataGenerator.GetStubOrderSetting();
使用util类的优点是,您可以创建一大堆辅助方法来返回存根对象,而不会使TestInitialize方法变得庞大而缓慢。 此外,您可以组合各个存根方法以返回更复杂的对象。
例如TestDataGenerator.GetStubEmployeeWithOrder();
将首先创建一个存根员工,然后调用TestDataGenerator.GetStubOrderSetting();
您已经创建的用于在返回之前为新创建的存根员工设置订单。
我在测试中使用了一个类来设置模拟(Moq)存储库以及配置的设置方法。
class MockRepo {
private Mock<IRepository> descriptiveSettingRepository;
private ArrayList _repository = new ArrayList();
public MockRepo() {
mockRepo.Setup( /* setup properties */ );
}
}
使用MoQ Callback将对象添加到ArrayList。 您还可以查询ArrayList并返回对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.