![](/img/trans.png)
[英]Unit test that tests ExpectedException is failing though exception is thrown
[英]MS Tests/ Moq - ExpectedException failing
我正在嘗試使用 MS 測試和 Moq 為我的一種方法創建單元測試。 下面是我的接口,實現 class 和方法。
public interface IDocumentManagementHandler
{
Task AddData(long documentId, string metadataCategoryName, List<KeyValuePair<string, string>> metadata);
}
public class DocumentManagementHandler : IDocumentManagementHandler
{
private readonly IService _service;
private readonly IFService _fService;
public readonly ILogger _logger;
private static readonly long rootFolderId = 123456;
public DocumentManagementHandler(IService Service, IFService FService, ILogger Logger)
{
_service = Service;
_fService = FService;
_logger = Logger;
}
public Task AddData(long documentId, string metadataCategoryName, List<KeyValuePair<string, string>> metadata)
{
if(string.IsNullOrEmpty(metadataCategoryName))
throw new ArgumentNullException(nameof(metadataCategoryName));
if (metadata == null)
throw new ArgumentNullException(nameof(metadata));
return AddDocumentMetadataAsync(documentId, metadataCategoryName, metadata);
}
我的 MSTest 方法
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestAddData()
{
long documentID = 123;
string metadataCategoryName = null;
List<KeyValuePair<string, string>> metadata = null;
var documentHandler = new Mock<IDocumentManagementHandler>();
documentHandler.Setup(s => s.AddData(documentID, metadataCategoryName, metadata));
var newresult = documentHandler.Object.AddData(documentID, metadataCategoryName, metadata);
}
當我將變量“metadataCategoryName”作為 NULL 傳遞時,我希望測試方法能夠通過,但測試失敗並顯示消息“測試方法沒有拋出預期的異常 System.ArgumentNullException。”。
知道這里有什么問題。
您的問題:您正在使用代表 object 接口的模擬,其中包含您要測試的方法,這意味着您的代碼從未真正被調用(斷點會揭示這個特定問題)。
至於你應該如何編寫測試:
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestAddData()
{
long documentID = 123;
string metadataCategoryName = null;
List<KeyValuePair<string, string>> metadata = null;
// Configure as needed using Mock.Get()
var service = Mock.Of<IService>();
var fService = Mock.Of<IFService>();
var logger = Mock.Of<ILogger>();
var documentHandler = new DocumentManagementHandler(service, fService, logger);
documentHandler.AddData(documentID, metadataCategoryName, metadata);
}
此外,您可能希望斷言異常中包含的數據。 例如,檢查您的ArgumentNullException
報告的參數名稱是否正確
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.