[英]Mocking class with multiple interfaces
我正在嘗試測試使用兩個不同接口的方法。 使用Moq,我可以配置interfaces方法並設置一個return對象,但是無論我設置為Returns,只是執行的第一個方法都返回值,第二個方法返回null。
這是一個例子:
接口1
public interface IUserRepository
{
User GetUserById(int id);
}
接口2
public interface ICallApiService
{
ApiResponseDto ValidateUser();
}
我要測試的課程
public class UserServices : IUserServices
{
private IUserRepository _userRepository;
private ICallApiService _callApiService;
public UserServices(IUserRepository userRepository, ICallApiService callApiService)
{
_userRepository = userRepository;
_callApiService = callApiService;
}
public User GetUserById(int id)
{
//result always have a value set to result
var result = _callApiService.ValidateUser();
//result2 is always null
var result2 = _userRepository.GetUserById(result.UserId);
return result2;
}
}
測試方法
[TestMethod]
public void TestMethod1()
{
moqUserRepository = new Moq.Mock<IUserRepository>();
moqUserRepository.Setup(s => s.GetUserById(1)).Returns(new User() { Id = 100, Birth = DateTime.Now, Email = "g@test.com", Name="g" });
moqCallApiService = new Moq.Mock<ICallApiService>();
moqCallApiService.Setup(s => s.ValidateUser()).Returns(new ApiResponseDto() { Active = true, Messages = "None", UserId = 100 });
var userService = new UserServices(moqUserRepository.Object, moqCallApiService.Object);
var resultInstance = userService.GetUserById(1);
var moqUserService = new Moq.Mock<UserServices>(moqUserRepository.Object, moqCallApiService.Object).Object;
var resultMock = moqUserService.GetUserById(1);
}
在使用instance和mock的兩種情況下,我都會遇到相同的錯誤(返回null)。
我想給Moq丟東西嗎?
您正在指示存儲庫模擬程序在輸入參數id
的值為1時返回對象。但是服務代碼將使用result.UserId
的值調用存儲庫,該值由另一個模擬設置調用設置為100。
將第一個設置呼叫更改為
moqUserRepository.Setup(s => s.GetUserById(100)).Returns(new User() { Id = 100, Birth = DateTime.Now, Email = "g@test.com", Name="g" });
或使用It.IsAny
,因為當您僅對方法進行一次It.IsAny
,您實際上並不關心該值:
moqUserRepository.Setup(s => s.GetUserById(It.IsAny<int>())).Returns(new User() { Id = 100, Birth = DateTime.Now, Email = "g@test.com", Name="g" });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.