Модульный тест для проверки неиспользуемых свойств - PullRequest
0 голосов
/ 18 июня 2019

У меня есть функция, которая запускает свойства класса и заменяет ключевое слово между двумя знаками доллара с тем же именем из шаблона.

Пример класса:

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, который дает мне свойства класса, но как мне тогда использовать эту информацию, чтобы проверить, были ли они уже использованы в шаблоне?

1 Ответ

1 голос
/ 18 июня 2019

Moq (https://github.com/moq/moq4/wiki)) предоставляет способы проверки доступа к свойству / методу. Следуйте инструкциям на по этой ссылке для более подробной информации. Чтобы убедиться, что ваши свойства используются в вашем шаблоне, вы можете использовать метод VerifyGet, например ниже:

[Fact]
public void VerifyAllPropertiesHaveBeenConsumedInTemplate()
{
    var mockMailObject = new Mock<IMailObject>();
    var template = "yourTemplateOrMethodThatReturnsYourTemplate";

    var result = mergeTemplate(template, mockMailObject.Object);

    mockMailObject.VerifyGet(m => m.Username, Times.Once);
    mockMailObject.VerifyGet(m => m.SubscriptionID, Times.Once);
    mockMailObject.VerifyGet(m => m.MessageTime, Times.Once);
    mockMailObject.VerifyGet(m => m.Subject, Times.Once);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...