私はASP.NETMVCを自分自身に教えるための小さなアプリを書いています。その機能の1つは、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スタイルを実行したいと思います。しかし、私は頭を動かすのに苦労していることを告白しなければなりません。
DoSearch()を実装してアドホックな本を返すFakeSearchを作成することはできますが、現時点ではそれが価値をもたらすとは思いませんか?たぶん後で、本のリストを使用するコードがあるとき。
他に何を最初にテストできますか?私が考えることができる唯一のテストは、クラウドへの呼び出しを(GetAmazonResultsで)モックし、DoSearchがLinq2XML選択を正しく実行して、正しいリストを返すことができることを確認するテストです。しかし、このタイプのテストは、コードを配置した後でしか記述できないように思われるので、何をモックするかを知っています。
あなたたちと女の子がこのテストファーストスタイルをどのように回避するかについてのアドバイスはありますか?