2010-01-30 5 views
1

Я использую Moq, и я как бы новичок в этом. Мне нужно проверить частный метод.Тестирование частного метода с помощью Moq не работает

У меня есть 2 сборки:

CustomerTest.dll 
CustomerBusiness.dll 

Так CustomerTest длл имеет класс следующим образом:

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    etc... 
} 

CustomerBusiness.dll имеет

общедоступный интерфейс ICustomer { аннулируются Купить (); }

public class Customer:ICustomer 
{ 
    public void Buy() 
    { 
     etc... 
    } 

    protected virtual bool CanTestPrivateMethod() 
    { 
     return true; 
    } 

} 

Я получаю следующую ошибку

System.ArgumentException : Member ICustomer.CannotTestMethod does not exist. 
at Moq.Protected.ProtectedMock`1.ThrowIfMemberMissing(String memberName, MethodInfo method, PropertyInfo property) 
at Moq.Protected.ProtectedMock`1.Setup(String methodOrPropertyName, Object[] args) 

Я также добавил [assembly: InternalsVisibleTo("CustomerTest.CustomerTestFixture") , но без разницы!

Что я делаю неправильно. Я знаю, что у моего интерфейса нет такого метода. Это тот момент, когда мой метод должен быть закрытым. Можете ли вы помочь с примером?

ответ

1

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

Создав Mock<ICustomer>, он реализует один метод интерфейса клиента. Он не знает о методе, который вы добавили в классе Customer. Если вам нужно высмеять этот метод, вам нужно создать Mock<Customer>.

+0

Это имеет смысл. Мне нужен этот атрибут InternalVisibleTo в сборке или я могу его удалить? Спасибо – user9969

+0

Также вы можете войти в него. Спасибо – user9969

+0

@ devnet247: удаление 'InternalsVisibleTo' не повлияет на вашу способность издеваться над материалом, но может быть важным для других аспектов вашего тестирования. Удаление его не должно иметь эффектов, которые не выпрыгивают во время компиляции. –

Смежные вопросы