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