Я пишу небольшое приложение для изучения ASP.NET MVC, и одной из его функций является возможность поиска книг на Amazon (или других сайтах) и добавления их на «книжную полку».
Итак, я создал интерфейс под названием IBookSearch (с методом DoSearch) и реализацию AmazonSearch, которая выглядит следующим образом
public class AmazonSearch : IBookSearch
{
public IEnumerable<Book> DoSearch(string searchTerms)
{
var amazonResults = GetAmazonResults(searchTerms);
XNamespace ns = "http://webservices.amazon.com/AWSECommerceService/2005-10-05";
var books= from item in amazonResults.Elements(ns + "Items").Elements(ns + "Item")
select new Book
{
ASIN = GetValue(ns, item, "ASIN"),
Title = GetValue(ns, item, "Title"),
Author = GetValue(ns, item, "Author"),
DetailURL = GetValue(ns, item, "DetailPageURL")
};
return books.ToList();
}
private static XElement GetAmazonResults(string searchTerms)
{
const string AWSKey = "MY AWS KEY";
string encodedTerms = HttpUtility.UrlPathEncode(searchTerms);
string url = string.Format("<AMAZONSEARCHURL>{0}{1}",AWSKey, encodedTerms);
return XElement.Load(url);
}
private static string GetValue(XNamespace ns, XElement item, string elementName)
{
//Get values inside an XElement
}
}
В идеале я хотел бы сделать этот стиль TDD, сначала написать тест, и все. Но я должен признаться, у меня проблемы с тем, чтобы обойти это.
Я мог бы создать FakeSearch, который реализует DoSearch (), и вернуть некоторые специальные книги, но я не думаю, что в данный момент это приносит какую-то ценность, не так ли? Может быть, позже, когда у меня есть код, который использует список книг.
Что еще я мог проверить первым? Единственный тест, о котором я могу подумать, - это тот, который проверяет вызов в облаке (в GetAmazonResults) и затем проверяет, что DoSearch может правильно выполнить выбор Linq2XML и вернуть правильный список. Но мне кажется, что этот тип теста может быть написан только после того, как у меня есть некоторый код на месте, поэтому я знаю что , чтобы высмеивать.
Какой-нибудь совет о том, как вы, парни и девушки, будете делать это в стиле первого теста?