[英]MOQ how to mock a class that depends on another class
我有一個像這樣的構造函數的類:
public class SsoAuthenticationService : ISsoAuthenticationService
{
public SsoAuthenticationService(ILoginManager manager)
{
_manager = manager;
}
}
而且manager類具有如下構造函數:
public class LoginManager:ILoginManager
{
private ILoginRepository login;
public LoginManager(ILoginRepository loginRepository)
{
login = loginRepository;
}
}
我正在嘗試針對SSoAuthenticationService類編寫單元測試
public void CreateLogin_Returns_Login()
{
//arrange
var mocManager = new Mock<ILoginManager>();
ILoginManager m = mocManager.Object;
//fails at the next line
var svc = new SsoAuthenticationService(mocManager.Object);
var request = new CreateSsoLoginRequest()
{
EmailAddress = "",
Password = "",
SecurityQuestionAnswer = "",
SecurityQuestionId = 0,
SiteIdentifier = "",
Username = ""
};
//act
var response = svc.CreateSsoLogin(request);
//assert
response.Should().NotBeNull();
}
當嘗試實例化SsoAuthenticationService
類時,這會產生錯誤( "Value cannot be null.\\r\\nParameter name: value"
),並且我認為問題在於我也需要模擬IRepository
類,但是我我不確定模擬代碼的外觀。
編輯 :完整的異常信息
“ Progressive.Sso.WebServices.SsoAuthenticationService”的類型初始值設定項引發了異常。
值不能為空。\\ r \\ n參數名稱:值
在Progressive.Sso.WebServices.SsoAuthenticationService..ctor(ILoginManager管理器)處
在d:\\ tfs \\ sso \\ Dev \\ Dev \\ Src \\ SSO Web Services \\ Progressive.Sso.Tests \\ Service Methods \\ ServiceTest.cs:第29行中的Progressive.Sso.Tests.Service_Methods.ServiceTest.CreateLogin_Returns_Login()
誰能幫我嗎?
我找到了解決方案,問題與Moq或構造函數依賴關系無關。
我聲明了以下兩個成員變量
private static readonly bool _useOperationTimer = SsoConfig.UseServiceOperationTimer;
private static readonly bool _logRequestData = SsoConfig.LogRequestData;
靜態方法調用是問題的原因,如果它們被注釋掉,則一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.