Тестирование приватного метода с Moq не работает - PullRequest
1 голос
/ 30 января 2010

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

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

CustomerTest.dll
CustomerBusiness.dll

Так CustomerTest dll имеет следующий класс:

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

   etc...
}

CustomerBusiness.dll имеет

публичный интерфейс ICustomer { void Buy (); }

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 Ответ

1 голос
/ 30 января 2010

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

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

...