Unit Testing For C# Developers
https://freecoursesite.com/unit-testing-for-c-developers-1/
https://www.seedr.cc/?r=2911610
Return IEnumerable List.
var _deactivateOperation = new Mock<IDeactivateOperation>(); var deactivateOperationlist = new List<IDeactivateOperation>(); _deactivateOperation.Setup(x => x.EnvironmentEligibility(It.IsAny<WebStore>())).Returns(true); deactivateOperationlist.Add(_deactivateOperation.Object); _deactivateServices.Setup(m => m.GetEnumerator()).Returns(() => deactivateOperationlist.GetEnumerator());
Throw Exception Example
[Test] public void ExecuteDeactivation_ExceptionOccured_ThrowException() { // Arrange var webstore = new WebStore { WebStoreId = 1 }; // Act // Assert Assert.That(() => deactivateHelperService.ExecuteDeactivation(webstore), Throws.Exception); _logService.Verify(s => s.Log(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<Exception>()), Times.Exactly(2)); _logService.Verify(s => s.SaveLog(It.IsAny<int>(), It.IsAny<IPrincipal>(), LogType.DeactivateWebstore, It.IsAny<bool>(), It.IsAny<Exception>()), Times.Once); }
Assert.That(() => applicationInsightsHelperService.InstallAppInsights(webStore), Throws.Exception);
_logService.Verify(s => s.Log(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<Exception>()), Times.Exactly(2));
Get By Id
var webStore = new WebStore { WebStoreId = 1 }; _unitOfWork.Setup(x => x.GetRepository<WebStore>().GetById(It.IsAny<int>())).Returns(webStore);
Parameters
[TestCase(false, false, false, false, "Domain1,Domain2")] [TestCase(false, false, true, true, "Domain1")] [TestCase(true, true, false, false, "Domain2")] [TestCase(false, true, false, true, "")] [TestCase(true, false, true, false, "")] [TestCase(true, true, true, true, "")] [Test] public void GetWebstoreDomains_WhenWebStoreDomainWithDifferentValues_ReturnWebstore(bool isErrorOccured1, bool isDeleted1, bool isErrorOccured2, bool isDeleted2, string expectedResults) { // Arrange WebStore webStore = new WebStore { StoreDomains = new List<WebStoreDomain> { new WebStoreDomain{ WebStoreDomainName = "Domain1",IsCustomDomainBindingErrorOccured=isErrorOccured1 ,IsDeleted=isDeleted1}, new WebStoreDomain{ WebStoreDomainName = "Domain2",IsCustomDomainBindingErrorOccured=isErrorOccured2 ,IsDeleted=isDeleted2} } }; //Act var result = migrationHelperService.GetWebstoreDomains(webStore); // Assert Assert.That(result, Is.EqualTo(expectedResults)); }
var listWebstore = new List<WebStore>() { new WebStore { WebStoreId = 1, CustomerName = "customerName" } }; _unitOfWork.Setup(x => x.GetRepository<WebStore>() .Get(It.IsAny<Expression<Func<WebStore, bool>>>(), It.IsAny<Func<IQueryable<WebStore>, IOrderedQueryable<WebStore>>>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())) .Returns(listWebstore);
Sample Method
[Test] // null handle public void EnvironmentEligibility_WhenWebStoreIsNull_ReturnWebstore() { // Arrange WebStore webStore = null; //Act var result = piwikTrackerService.EnvironmentEligibility(webStore); // Assert Assert.IsFalse(result); }
verify
_unitOfWork.Verify(uow => uow.SaveChanges(_principalUser.Object), Times.Once); _unitOfWork.Verify(uow => uow.GetRepository<WebstoreResourceAllocation>().Get(It.IsAny<Expression<Func<WebstoreResourceAllocation, bool>>>(), It.IsAny<Func<IQueryable<WebstoreResourceAllocation>, IOrderedQueryable<WebstoreResourceAllocation>>>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>()), Times.Never);
Date passing as parameters
private static IEnumerable DataWhenScheduleDateTimeLessThanCurrentDate() { yield return new TestCaseData(new DateTime(2010, 12, 5), new DateTime(2012, 12, 5)); yield return new TestCaseData(new DateTime(2010, 12, 5), DateTime.Today); } [TestCaseSource(typeof(ClusterUpgradeHelperServiceTest), "DataWhenScheduleDateTimeLessThanCurrentDate")] [Test] public void GetPendingRewriteRuleBindRequestedWebstore_WhenScheduleDateTimeLessThanCurrentDate_ReturnObject(DateTime scheduledDate, DateTime date) { // Arrange var webStore = new WebStore { WebStoreId = 1, WebStoreStateId = (int)WebstoreStatus.BindRedirectUrlRequested }; var redirectScheduleList = new List<RedirectSchedule>() { new RedirectSchedule { WebstoreId=1, IsExecuted = false,IsBindRedirectUrlApproved =true , Webstore = webStore, ScheduledDate =scheduledDate } }; _unitOfWork.Setup(x => x.GetRepository<RedirectSchedule>() .Get(It.IsAny<Expression<Func<RedirectSchedule, bool>>>(), It.IsAny<Func<IQueryable<RedirectSchedule>, IOrderedQueryable<RedirectSchedule>>>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())) .Returns(redirectScheduleList); _timeZoneService.Setup(x => x.GetCurrentDateTimeByTimeZoneId(It.IsAny<string>())).Returns(date); //Act var result = rewriteRuleHelperService.GetPendingRewriteRuleBindRequestedWebstore(); // Assert Assert.IsNotNull(result); }
List Null Or Empty
private static IEnumerable DataWhenWebStoreTemporaryDatabaseUserListEmptyOrNull() { yield return new TestCaseData(null); yield return new TestCaseData(new List<WebStoreTemporaryDatabaseUser>()); } [Test] //?.ToList() [TestCaseSource(typeof(TemporaryDatabaseUserHelperServiceTest), "DataWhenWebStoreTemporaryDatabaseUserListIsEmptyOrNull")] public void CreateTemporaryDatabaseUser_WhenWebStoreTemporaryDatabaseUserListIsEmptyOrNull_IsVerified(List<WebStoreTemporaryDatabaseUser> dbUserList) { _unitOfWork.Setup(x => x.GetRepository<WebStoreTemporaryDatabaseUser>() .Get(It.IsAny<Expression<Func<WebStoreTemporaryDatabaseUser, bool>>>(), It.IsAny<Func<IQueryable<WebStoreTemporaryDatabaseUser>, IOrderedQueryable<WebStoreTemporaryDatabaseUser>>>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())) .Returns(dbUserList); //Act TemporaryDatabaseUserHelperService.CreateTemporaryDatabaseUser(); // Assert _unitOfWork.Verify(uow => uow.SaveChanges(_principalUser.Object), Times.Never); }
_principalUser.Setup(x => x.Identity.Name).Returns("A");
Dictionary / IIndex mocking
var _processorDictionary = new Mock<IIndex<ProcessorTypes, IExecuteProcessor>>();
var _listProcessResponse = new List<ProcessResponse> { new ProcessResponse { ResponseText = "Sample Response text", ErrorText = string.Empty } }; Mock<IExecuteProcessor> _executeProcessor = new Mock<IExecuteProcessor>(); _executeProcessor.Setup(x => x.ExecuteProcess(It.IsAny<string[]>(), It.IsAny<int>())).Returns(_listProcessResponse); _processorDictionary.Setup(x => x[It.IsAny<ProcessorTypes>()]).Returns(_executeProcessor.Object);
How to return Null object
_azure.Setup(x => x.WebApps.GetById(It.IsAny<string>())).Returns((IWebApp)null);
complex item mock :- AksClusterInstallationServiceTest
[Test] // null handle required. public void Install_IsValidSubnetDeploymentTrueAndClusterVnetCreationReturnsNull_ReturnFalseResponseObject() { // Arrange var cluster = new AKSCluster() { Region = new Region() { Name = "SEA" }, InstallationProfile = new WebstoreInstallationProfile() { SanaRegionCode = "SEA" }, VnetAddressSpace = "VnetAddressSpace", VnetSubnetAddress = "VnetSubnetAddress" }; _clusterCommonService.Setup(x => x.GetAksClusterVnetResourceName(It.IsAny<string>())).Returns("ResourceName"); _clusterCommonService.Setup(x => x.GetAksClusterResourceGroupName(It.IsAny<AKSCluster>())).Returns("ResourceGroupName"); var _azure = new Mock<IAzure>(); var _blank = new Mock<IBlank>(); var _withGroup = new Mock<IWithGroup>(); var _withCreate = new Mock<IWithCreate>(); var _withCreateAndSubnet = new Mock<IWithCreateAndSubnet>(); var _creatable = new Mock<ICreatable<INetwork>>(); _blank.Setup(c => c.WithRegion(It.IsAny<string>())).Returns(_withGroup.Object); _withGroup.Setup(c => c.WithNewResourceGroup(It.IsAny<string>())).Returns(_withCreate.Object); _withCreate.Setup(c => c.WithAddressSpace(It.IsAny<string>())).Returns(_withCreateAndSubnet.Object); _withCreateAndSubnet.Setup(c => c.WithSubnet(It.IsAny<string>(), It.IsAny<string>())).Returns(_withCreateAndSubnet.Object); _creatable.Setup(c => c.Create()).Returns(new Mock<INetwork>().Object); _azure.Setup(c => c.Networks.Define(It.IsAny<string>())).Returns(_blank.Object); _clusterHelperService.Setup(x => x.IsValidClusterDeployment(It.IsAny<AKSCluster>())).Returns(true); _clusterHelperService.Setup(x => x.IsValidSubnetDeployment(It.IsAny<AKSCluster>(), It.IsAny<string>())).Returns(true); // Set to False _authenticationService.Setup(x => x.AzureAuthentication(It.IsAny<WebstoreInstallationProfile>())).Returns(_azure.Object); // Act var result = aksClusterInstallationService.Install(cluster); // Assert Assert.IsFalse(result.IsSuccess); }
mock Static methods
https://stackoverflow.com/questions/12580015/how-to-mock-static-methods-in-c-sharp-using-moq-framework


