我試圖嘲笑繼承了som泛型方法的基類的用戶服務。我無法嘲笑對RetrieveEntitiesTest的調用。使用moq 4.0嘲笑泛型類型的基類方法
當我打電話var validated = _userServiceMock.Object.ValidateUser(email, password);
的acctual實施RetrieveEntitiesTest的執行...
這可能嗎? U可以代表我的代碼如下:
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 = "[email protected]";
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);
}
}
[懲戒與Moq的基類的方法調用]的可能重複(http://stackoverflow.com/questions/1293151/mocking-a- base-class-method-call-with-moq) –