Как интегрировать регистрацию в контракт кода .NET - PullRequest
2 голосов
/ 18 октября 2011

Я пытаюсь обернуть голову вокруг кода .NET.При использовании кода контракта, как я регистрирую утверждение, вызывая сбой рассматриваемого метода.Например, посмотрите на этот код:

  Public IsMatch(string x, string, y) 
{ 

    Contract.Assert(!string.IsNullOrWhiteSpace(x)); 
     Contract.Assert(!String.IsNullOrWhitespace(y));

       return x == y;
 }

Пусть скажем x = string.Empty.Это приведет к сбою метода.Как мне записать, что утверждение вызывает сбой вышеуказанного метода.У меня может быть много утверждений, таких как это, в большом приложении, и было бы хорошо узнать, кто из них является источником проблем.

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

При использовании контракта кода, как мне зарегистрировать утверждение, вызывающее сбой рассматриваемого метода?

Если вы говорите о ведении журнала, я предполагаю, что вы имеете в виду во время выполнения, а нестатическая проверка.

Утверждения вызывают исключения, когда они терпят неудачу.Вы можете написать блок try / catch для регистрации исключений:

try
{
    bool result = SomeClass.IsMatch(x, y);
}
catch(Exception e)
{
    logger.Error(e.ToString()); // Use whatever logging mechanism here
    throw; // Note: Make sure you rethrow if you catch "Exception e"
}

Это даст вам трассировку стека исключения, которая будет указывать на строку, в которой завершилась ошибка.

КакУказанная политика, вы также можете включить параметр userMessage в каждое утверждение.Таким образом, ваши журналы будут содержать пользовательские сообщения об ошибках в дополнение к трассировке стека.

Если вам нужен хороший класс logger, посмотрите библиотека NLog .

3 голосов
/ 18 октября 2011

Посмотрите на: http://msdn.microsoft.com/en-us/library/system.diagnostics.contracts.contract.aspx

По существу, в качестве второго параметра вы можете указать сообщение.

Тем не менее, Contract.Assert дорого примитивен.Условия отправки лучше проверить с помощью Contract.Requires, так как это требование для вашего метода.

Редактировать: Условия отправки, конечно, должны быть предварительными условиями

...