更新每个重复标记,标记的重复标记主要讨论如何使用ref或out设置moq对象,而不是如何验证它们。我知道我可以在verify语句中使用ref It.ref.IsAny,但是我想验证值是否设置正确,而不仅仅是方法是否被调用。
-
Nunit中的调用服务方法
-
服务方法根据传入的参数创建对象
-
服务调用存储库进行插入
-
使用Moq,我已经设置了一个mocked repository类,并且我能够验证它是否确实执行了调用,但是我希望能够验证它是否正确地生成了对象。我正在构建一个相同的对象,并尝试如下验证调用:
_mockWorkerRepository.Verify(w => w.Create(ref newWorker), Times.Once);
更新以包括完整的测试方法和测试中的方法:
[Test]
public void ConfirmWorker_ShouldCreateWorker()
{
//Arrange
Worker worker = null;
var newWorker = new Worker
{
Name = $@"{_machineName.ToLower()} worker",
StatusId = WorkerStatus.OFFLINE,
TypeId = WorkerType.TYPE,
MessageQueueAddress = $@"FORMATNAME:DIRECT=OS:{_machineName}\private$\{_queueName}",
HostProcessIdentifier = _testConfig.HostId,
Created = _testTime,
CreatedBy = "createdBy",
LastUpdated = _testTime,
LastUpdatedBy = "updatedBy",
LastCheckinDate = _testTime
};
_mockWorkerRepository.Setup(w => w.GetByHostId(It.IsAny<string>())).Returns(worker);
_mockDateTimeRepository.Setup(d => d.UtcNow()).Returns(_testTime);
var workerService = new WorkerService(_mockDateTimeRepository.Object, _mockJobRepository.Object, _mockJobWorkerRepository.Object, _mockLogger.Object, _mockQueueRepository.Object, _mockWorkerRepository.Object, _testConfig);
//Act
workerService.ConfirmWorker(_machineName, _queueName);
//Assert
_mockWorkerRepository.Verify(w => w.Create(ref newWorker), Times.Once);
_mockLogger.Verify(l => l.WriteLog("Worker registered in database"), Times.Once);
}
public void ConfirmWorker(string machineName, string queueName)
{
_logger.WriteLog($"Checking to add Worker if didn't exist for: {_configSettings.HostId} with {queueName}");
var worker = _workerRepository.GetByHostId(_configSettings.HostId);
if (worker != null)
{
_logger.WriteLog("Worker exist, skipping creation");
return;
}
_logger.WriteLog("Instance of this worker not found, CREATING one.");
var newWorker = new Worker()
{
Name = $@"{machineName.ToLower()} worker",
StatusId = WorkerStatus.OFFLINE,
TypeId = WorkerType.TYPE,
MessageQueueAddress = $@"FORMATNAME:DIRECT=OS:{machineName}\private$\{queueName}",
HostProcessIdentifier = _configSettings.HostId,
Created = _dateTimeRepository.UtcNow(),
CreatedBy = "createdBy",
LastUpdated = _dateTimeRepository.UtcNow(),
LastUpdatedBy = "updatedBy",
LastCheckinDate = _dateTimeRepository.UtcNow()
};
_workerRepository.Create(ref newWorker);
_logger.WriteLog("Worker registered in database");
}