簡體   English   中英

MS 測試/起訂量 - ExpectedException 失敗

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

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