Насмешка над методом базового класса с универсальным типом с использованием moq 4.0 - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь смоделировать Userservice, который наследует базовый класс, с помощью неких общих методов.Я не могу издеваться над вызовом RetrieveEntitiesTest.

Когда я вызываю var validated = _userServiceMock.Object.ValidateUser(email, password);, выполняется актуальная реализация RetrieveEntitiesTest ...

Возможно ли это?Вы можете увидеть представление моего кода ниже:

public class BaseService
{
    public virtual bool RetrieveEntitiesTest<T>(QueryExpression query)
    {
        return false;
    }
}

public class UserService : BaseService
{
    public bool ValidateUser(string username, string password)
    {
        // adding query parameters
        var query = new QueryExpression();

        var userCount = RetrieveEntitiesTest<User>(query);

        return userCount > 0;
    }
}

[TestFixture]
public class UserServiceTests
{
    private Mock<UserService> _userServiceMock;

    [TestFixtureSetUp]
    public void TestFixtureSetUp()
    {
        _userServiceMock = new Mock<UserService>();
    }

    [Test]
    public void ValidateLogin_ValidEmailValidPassword_ValidatedAndReturnsTrue()
    {
        string email = "user@company.com";
        string password = "password";
        var query = .....

        _userServiceMock.Setup(x => x.RetrieveEntitiesTest<User>(new QueryExpression())).Returns(true);

        var validated = _userServiceMock.Object.ValidateUser(email, password);

        Assert.IsTrue(validated);
    }
}

1 Ответ

3 голосов
/ 29 ноября 2011

Вы не правильно настраиваете свой макет.Используйте It.IsAny (см. Раздел «Сопоставление аргументов») вместо нового выражения QueryExpression:

_userServiceMock
    .Setup(x => x.RetrieveEntitiesTest<User>(It.IsAny<QueryExpression>()))
    .Returns(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...