nUnit / nMock /ユニットテストの初心者の質問のビット:
このクラスをユニットテストしようとしています。
「getCurrencyRates」から返される値を知りたいので、そのデータに基づいてテストを作成できるように、モックを作成しました。
そこで、このオブジェクトのモックを作成しました(返された為替レートを知るためだけに)。
...しかし今、私はこのクラスの他のメソッドのいくつかも呼び出したいと思います。
するべきか:
a)どういうわけかモックオブジェクトから実際のメソッドを呼び出します(それが可能かどうかさえわかりません)b)Webサービス呼び出しのみがそれ自体のオブジェクトに含まれるようにリファクタリングし、そのモックを作成しますc)何か他のもの?
public class CurrencyConversion : ICurrencyConversion
{
public decimal convertCurrency(string fromCurrency, string toCurrency, decimal amount)
{
CurrencyRateResponse rates = getCurrencyRates();
var fromRate = getRate(rates, fromCurrency);
var toRate = getRate(rates, toCurrency);
decimal toCurrencyAmount = toRate / fromRate * amount;
return toCurrencyAmount;
}
public int addNumbers(int i, int j)
{
return i + j;
}
public decimal getRate(CurrencyRateResponse rates, string fromCurrency)
{
if (rates.rates.ContainsKey(fromCurrency))
{
return rates.rates[fromCurrency];
}
else
{
return 0;
}
}
public CurrencyRateResponse getCurrencyRates()
{
HttpWebRequest webRequest = GetWebRequest("http://openexchangeerates.org/latest.json");
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
string jsonResponse = string.Empty;
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
jsonResponse = sr.ReadToEnd();
}
var serializer = new JavaScriptSerializer();
CurrencyRateResponse rateResponse = serializer.Deserialize<CurrencyRateResponse>(jsonResponse);
return rateResponse;
}
public HttpWebRequest GetWebRequest(string formattedUri)
{
// Create the request’s URI.
Uri serviceUri = new Uri(formattedUri, UriKind.Absolute);
// Return the HttpWebRequest.
return (HttpWebRequest)System.Net.WebRequest.Create(serviceUri);
}
}