簡體   English   中英

MOQ如何模擬依賴於另一個類的類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM