如何将TDD应用于web API开发
我正在设计一个运行在Google App Engine上的web服务,它可以抓取许多网站,并通过RESTful界面显示它们的数据。基于一些背景阅读,我想我应该尝试测试驱动开发(TDD),并在编写任何业务代码之前开发我的测试如何将TDD应用于web API开发,api,google-app-engine,rest,tdd,Api,Google App Engine,Rest,Tdd,我正在设计一个运行在Google App Engine上的web服务,它可以抓取许多网站,并通过RESTful界面显示它们的数据。基于一些背景阅读,我想我应该尝试测试驱动开发(TDD),并在编写任何业务代码之前开发我的测试 我的问题是由以下事实引起的,即我的已删除元素列表中包含了时刻表和其他经常更改的记录。我对TDD的了解有限,因为您编写的测试检查代码执行的结果,并将这些结果与硬编码的结果集进行比较。由于数据集经常变化,这种方法似乎是不可能的。假设这是真的,那么测试这样一个API的最佳方法是什么
我的问题是由以下事实引起的,即我的已删除元素列表中包含了时刻表和其他经常更改的记录。我对TDD的了解有限,因为您编写的测试检查代码执行的结果,并将这些结果与硬编码的结果集进行比较。由于数据集经常变化,这种方法似乎是不可能的。假设这是真的,那么测试这样一个API的最佳方法是什么?如何测试大规模web API(Twitter、Google、Netflix等)?根据您的描述,您很容易发现自己正在编写集成测试。如果您的目标是测试处理从刮取数据返回的数据的逻辑(例如,您知道您将获得一个特定格式的时间表,并且您现在拥有处理该数据的逻辑),那么您需要在web服务逻辑和处理逻辑之间创建一个接缝。完成此操作后,您应该能够模拟从web服务调用返回的数据,以始终返回相同的表数据,然后可以对其编写一致的单元测试
public class ScrapingService : IScrapingService
{
public string Scrape(string url)
{// scraping logic}
}
public interface IScrapingService
{
string Scrape(string url);
}
public class ScrapingProcessor
{
private IScrapingService _scrapingService
// inject the dependency
pubilc ScrapingProcessor(IScrapingService scrapingService)
{
_scrapingService = scrapingService;
}
public void Process(string url)
{
var scrapedData = _scrapingService.Scrape(url)
// now process the scrapedData
}
}
为了进行测试,您现在可以创建一个实现IScrapingService接口的FakeScrapingService,然后从Scrape方法返回您喜欢的任何数据。有一些非常好的模拟框架可以让这类事情变得简单。我个人最喜欢的是NSubstitue
我希望这个解释有帮助。您必须选择测试类型: