MS测试/Moq-ExpectedException失败



我正在尝试使用MS测试和Moq为我的一个方法创建单元测试。下面是我的接口、实现类和方法。

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);

}

当我通过变量"时,我期望测试方法通过;元数据类别名称";为NULL,但测试失败;测试方法未引发预期的异常System.ArgumentNullException。"。

知道这里出了什么问题吗。

您的问题:您正在使用一个mock来表示包含要测试的方法的对象的接口,这意味着您的代码从未真正被调用过(断点会揭示这个特定问题(。

至于你应该如何写你的测试:

[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是否报告了正确的参数名称

相关内容

最新更新