Вы, вероятно, могли бы переименовать свой вопрос в «Как вы используете фальшивый фреймворк с модульным тестированием 99% времени», потому что вы на правильном пути, чтобы сделать именно это - очень типичное использование.
Вы захотите извлечь интерфейс из вашего класса UserMembership (щелкните правой кнопкой мыши внутри класса, выберите «рефакторинг», а затем «извлечь интерфейс»), а затем используйте Moq, чтобы создать фиктивные экземпляры этого интерфейса для использования в ваши тесты. Затем вы можете использовать Moq, чтобы «настроить» поведение этого макета, чтобы делать все, что вы хотите во время теста. Синтаксис будет выглядеть так:
var userMembershipMock = new Mock<IUserMembership>();
userMembershipMock.Setup(m=> m.ValidateUser(It.Is<string>(str=> str == "myUserName"), It.Is<string>(str=> str == "myPassword"))).Returns(true);
Затем вы создадите новый экземпляр вашего класса, передав его в свой фиктивный экземпляр IUserMembership (но, поскольку вы сделаете так, чтобы конструктор вашего класса принял аргумент типа интерфейса, ваш класс не будет заботиться о том, передаете ли вы его это макет или фактический экземпляр UserMembership
MyClass myClass = new MyClass(userMembershipMock.Object);
, после чего вы можете начать тестировать поведение своего MyClass:
var request = new LoginRequest { UserName = "myUserName", Password = "myPassword" };
LoginResponse response = myClass.Login(request);
И тогда вы можете утверждать, что ответ вашего класса - это то, что вы ожидаете:
Assert.AreEqual(AcknowledgeType.Success, response.Acknowledge);
или вы можете проверить, что метод (или свойство) вашего макета был вызван так, как вы ожидали:
userMembershipMock.Verify(m=> m.ValidateUser(It.Is<string>(str=> str == "myUserName"), It.Is<string>(str=> str == "myPassword")), Times.Once());
и т. Д.
Страница быстрого запуска Moq является своего рода чтением на одной странице и может научить вас 99% всего, что вам нужно знать, чтобы его использовать.