簡體   English   中英

如何在 c# 中模擬用於單元測試的記錄器?

[英]How to mock a logger for unit testing in c#?

我需要進行單元測試的方法以下列方式記錄 output 並且不返回任何內容。 我如何為以下情況編寫單元測試方法? 請幫助我是這個概念的新手,之前沒有寫過任何測試方法

private void revoke (params) {
    if (userexist (revokedb, userid))``
{
        deleteusers (revokedb, userid);
        if (userexist (revokedb, userid))
       {
           logger.info ("Not able to delete user");
       }
       else
       {
          logger.info ("User was succesfully deleted");
       }
    else
  {
       logger.info ("unable of find the user");
  }
}

查看起訂量moq ://github.com/Moq/moq4

您的記錄器需要實現一個接口,然后您可以模擬。

例如

MyLogger:ILogger

ILogger將定義方法info(string)

在你的測試中,你首先設置你的模擬

var mock = new Mock<ILoveThisLibrary>();

然后您可以將此模擬注入您的 class (其中使用logger )。 通過構造函數或任何其他方法用這個模擬 object 替換實際記錄器。 這稱為依賴注入。

現在所有對logger的調用都將定向到您的模擬 object,您可以執行各種 mocking。 例如期望,即檢查使用您期望的字符串調用的info

我認為您可以在 class 構造函數中注入記錄器,如下所示。

public class BusService : IBusService
    {
        private readonly ILogger _logger;
        public BusService(ILogger<BusService> logger)
        {
            _logger = logger;
        }
        private void revoke (params) {
    if (userexist (revokedb, userid))``
    {
        deleteusers (revokedb, userid);
        if (userexist (revokedb, userid))
       {
           _logger.info ("Not able to delete user");
       }
       else
       {
          _logger.info ("User was successfully deleted");
       }
    else
    {
       _logger.info ("unable of find the user");
    }
  }
}

一旦像上面那樣將它注入到 class 構造函數中,您就可以使用 Moq class 來模擬您的記錄器,如下面的測試方法。

[Fact]
public void BusService_revoke_deleteUser()
        {
            // Arrange
            var logger = Mock.Of<ILogger<BusService>>();
            
            var busService = new BusService(logger);
            
            // Act
            var result = busService.revoke(params);

            // Assert
             // Assert statement will go here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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