У меня есть функция, которая запускает свойства класса и заменяет ключевое слово между двумя знаками доллара с тем же именем из шаблона.
Пример класса:
public class FeedMessageData : IMailObject
{
public string Username { get; private set;}
public string SubscriptionID { get; private set; }
public string MessageTime { get; private set; }
public string Subject { get; private set; }
public FeedMessageData(string username, string subscriptionID, DateTime messageTime)
{
this.Username = username;
this.SubscriptionID = subscriptionID;
this.MessageTime = messageTime.ToShortDateString();
this.Subject = "Feed " + DateTime.Now + " - SubscriptionID: " + this.SubscriptionID;
}
}
И это функция для замены шаблона со свойствами:
private string mergeTemplate(string template, IMailObject mailObject)
{
Regex parser = new Regex(@"\$(?:(?<operation>[\w\-\,\.]+) ){0,1}(?<value>[\w\-\,\.]+)\$", RegexOptions.Compiled);
var matches = parser.Matches(template).Cast<Match>().Reverse();
foreach (var match in matches)
{
string operation = match.Groups["operation"].Value;
string value = match.Groups["value"].Value;
var propertyInfo = mailObject.GetType().GetProperty(value);
if (propertyInfo == null)
throw new TillitException(String.Format("Could not find '{0}' in object of type '{1}'.", value, mailObject));
object dataValue = propertyInfo.GetValue(mailObject, null);
template = template.Remove(match.Index, match.Length).Insert(match.Index, dataValue.ToString());
}
return template;
}
Я ищу для создания модульного теста, который записывает в консоль возможные свойства, которые не используются в шаблоне.Например, если в шаблоне не было $ SubscriptionID $.Я пытался использовать PropertyInfo, который дает мне свойства класса, но как мне тогда использовать эту информацию, чтобы проверить, были ли они уже использованы в шаблоне?