Пекс и Мок работают вместе, Никли?

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

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

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

2 ответа

Решение

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

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

Согласно оригинальной исследовательской работе для 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();
        }
    }
 }

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

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

Другие вопросы по тегам