Пекс и Мок работают вместе, Никли? - PullRequest
3 голосов
/ 18 декабря 2010

Кто-нибудь пробовал это?

Мне нравится moq, и мне нравится то, что делает pex, но я не пробовал их вместе. Я бы предпочел использовать moq над кротами в большинстве случаев, но мне любопытно посмотреть, не сталкивался ли кто-нибудь с препятствиями?

Они хорошо играют?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Хотя я не пробовал, Пекс и Мок должны ладить как старые друзья.

Хотя методы перехвата между Pex и Moq различны (Pex использует ProfilerAPI для интерпретации инструкций MSIL; Moq использует DynamicProxy для динамического получения классов), в исходном коде Moq есть ссылки, которые предполагают, что он был разработан, чтобы предотвратить проблемы повторного входа где Пекс будет мешать Мок.

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

Исходный код Moq :

internal static MethodCall<T> Setup<T>(Mock mock, Expression<Action<T>> expression, Func<bool> condition) where T : class
{
    return PexProtector.Invoke(() =>
    {
       var methodCall = expression.ToMethodCall();
       var method = methodCall.Method;
       var args = methodCall.Arguments.ToArray();
       ThrowIfNotMember(expression, method);
       ThrowIfCantOverride(expression, method);

       var call = new MethodCall<T>(mock, condition, expression, method, args);
       var targetInterceptor = GetInterceptor(methodCall.Object, mock);
       targetInterceptor.AddCall(call, SetupKind.Other);

       return call;
     });   
 }

PexProtector определяется как:

 internal sealed class __ProtectAttribute : Attribute
 {
 }

 namespace Moq
 {
    [__Protect]
    [DebuggerStepThrough]
    internal static class PexProtector
    {
        public static void Invoke(Action action)
        {
           action();
        }

        public static T Invoke<T>(Func<T> function)
        {
           return function();
        }
    }
 }
0 голосов
/ 03 мая 2011

Я не очень хорошо работал pex amd moq, хотя это было очень давно.Казалось, что Пекс потерялся в Reflection.Emit / динамическом прокси-компоненте, который создает moq.

Я бы посоветовал взглянуть на Кротов, если вам нужно делать насмешки в сочетании с Пексом.это довольно приятный фреймворк для всех и уже в комплекте с pex

...