首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用when服务时测试fixture

在使用when服务时测试fixture
EN

Stack Overflow用户
提问于 2011-09-07 05:37:12
回答 2查看 137关注 0票数 1

我仍然是TDD的新手,我也在尝试使用一个遗留的应用程序,这个应用程序在构建时并没有考虑到测试。

我正在尝试测试的一个功能(bug)是识别订单是否处于允许用户安排送货的状态。

故事是这样的:假设一个订单的ReadyFrom日期大于10天且从今天起小于28天,其中用于测试订单的and服务处于有效的交付状态,则返回true,系统应列出从ReadyFrom日期开始的7个可用交付日期

因此,我确定了一些适合测试这些条件的订单。我认为我还应该为web服务创建一个存根,这样它就会根据测试返回true或false。

我写了一个失败的测试,并使用实时数据库的副本修复了错误,问题是下周,我使用的订单将不再满足某些条件,这些条件是基于系统日期的。

在测试中使用测试订单之前,我是否应该将测试订单放入一个fixture中,并在设置过程中动态更改这些订单上的相关日期值,并动态更改我对系统发回的一组交付日期的期望(交付日期也由web服务返回,它也必须被模拟)

或者,随着应用程序的开发,这会带来问题吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2011-09-07 15:32:01

我使用测试数据构建器模式来创建测试数据,并在测试方法本身中设置它。我想它使得测试代码非常易读。构建器本身是这样的(C# +Rhinomock):

代码语言:javascript
复制
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方法中,顺序是使用以下语法创建的:

代码语言:javascript
复制
DateTime someValidDate = new DateTime(1,2,2012);

IOrder order = new OrderBuilder()
                      .WithDate(someValidDate)
                      .Build();

这不是很漂亮吗?:o)

票数 1
EN

Stack Overflow用户

发布于 2011-09-07 05:45:08

将测试命令放入一个fixture中

是。

在设置过程中动态更改这些订单上的相关日期值

说大也大吧。

不要让它听起来太复杂。Fixture应该有一堆具有固定的已知日期的测试订单。你不应该改变太多。

如果--由于某种原因--日期不能确定,那么setUp会做三件事。

  1. 使用适当的模拟和适当的日期“从头开始”构建订单。
  2. 为要使用的实际测试保存一些“预期结果”提示。

再来一次。不要让它听起来很复杂。你不是在“动态改变我的期望”。您只是在setUp中设置期望值。

动态地更改我对系统发回的一组交付日期的期望(交付日期也是由web服务返回的,它也必须被模拟)

模拟web服务意味着日期可能是固定的。mock和fixture应该能够返回一组固定的日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7326469

复制
相关文章

相似问题

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