我仍然是TDD的新手,我也在尝试使用一个遗留的应用程序,这个应用程序在构建时并没有考虑到测试。
我正在尝试测试的一个功能(bug)是识别订单是否处于允许用户安排送货的状态。
故事是这样的:假设一个订单的ReadyFrom日期大于10天且从今天起小于28天,其中用于测试订单的and服务处于有效的交付状态,则返回true,系统应列出从ReadyFrom日期开始的7个可用交付日期
因此,我确定了一些适合测试这些条件的订单。我认为我还应该为web服务创建一个存根,这样它就会根据测试返回true或false。
我写了一个失败的测试,并使用实时数据库的副本修复了错误,问题是下周,我使用的订单将不再满足某些条件,这些条件是基于系统日期的。
在测试中使用测试订单之前,我是否应该将测试订单放入一个fixture中,并在设置过程中动态更改这些订单上的相关日期值,并动态更改我对系统发回的一组交付日期的期望(交付日期也由web服务返回,它也必须被模拟)
或者,随着应用程序的开发,这会带来问题吗?
谢谢
发布于 2011-09-07 15:32:01
我使用测试数据构建器模式来创建测试数据,并在测试方法本身中设置它。我想它使得测试代码非常易读。构建器本身是这样的(C# +Rhinomock):
public class OrderBuilder
{
MockRepository _mockRepository;
IOrder _order;
public OrderBuilder()
{
_mockRepository = new MockRepository();
_order = _mockRepository.Stub<IOrder>();
}
public OrderBuilder WithDate(DateTime date)
{
_order.Date = date;
return this;
}
public IOrder Build()
{
_mockRepository.ReplayAll();
return _order;
}
}在test方法中,顺序是使用以下语法创建的:
DateTime someValidDate = new DateTime(1,2,2012);
IOrder order = new OrderBuilder()
.WithDate(someValidDate)
.Build();这不是很漂亮吗?:o)
发布于 2011-09-07 05:45:08
将测试命令放入一个fixture中
是。
在设置过程中动态更改这些订单上的相关日期值
说大也大吧。
不要让它听起来太复杂。Fixture应该有一堆具有固定的已知日期的测试订单。你不应该改变太多。
如果--由于某种原因--日期不能确定,那么setUp会做三件事。
再来一次。不要让它听起来很复杂。你不是在“动态改变我的期望”。您只是在setUp中设置期望值。
动态地更改我对系统发回的一组交付日期的期望(交付日期也是由web服务返回的,它也必须被模拟)
模拟web服务意味着日期可能是固定的。mock和fixture应该能够返回一组固定的日期。
https://stackoverflow.com/questions/7326469
复制相似问题