クラスをテストしようとしています
public class Parser
{
private static IDictionary<String, Regex> PhrasesToRegexp { get; set; }
public static void InitPhrases(IList<String> Phrases, Boolean useDeclination )
{
throw new NotImplementedException();
}
...
public ParsingResults Find(String source)
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(source);
return new ParsingResults(FindUrls(doc), CountPhrases(doc));
}
private IList<String> FindUrls(HtmlDocument source)
{
return source.DocumentNode.SelectNodes("//a[@href]").
Select(link => link.GetAttributeValue("href", "")).ToList();
}
private IDictionary<String, int> CountPhrases(HtmlDocument source)
{
IDictionary<String, int> results = new Dictionary<String, int>();
foreach (String key in PhrasesToRegexp.Keys)
{
results.Add( key , 0 );
}
foreach (HtmlNode node in source.DocumentNode.SelectNodes("//p"))
{
foreach (String phrase in results.Keys)
{
results[phrase] += PhrasesToRegexp[phrase].Matches
(Regex.Replace(node.InnerText, @"<(.|\n)*?>", string.Empty)).Count;
}
}
return results;
}
}
問題は、プロパティPhrasesToRegexp
が初期化される (される) ことでInitPhrases
あり、Find メソッドの単体テストを記述しようとしています。基本的に、このプライベート プロパティの値を設定する必要がありますPhrasesToRegexp
。それを行う方法はありますか?私はモックの専門家ではありませんが、このプロパティとテストされたメソッドが同じオブジェクトにあるため、モックはうまくいかないと思います。