or
It's quite common that we will try to customise a Framework class but still reuse most of the logic from the base class. For example, we want to provide our own Navigation Provider inheriting from Microsoft.SharePoint.Navigation.SPNavigationProvider. And we want to override GetChildNodes class to add some addition site map node on top of the collection that base class return. So we will be calling base.GetChildNodes() from our GetChildNodes method.
Here is a simple example. The problem is I dont know how to reference the base class method in the Mock.Arrange method?
public class ParentClass { public virtual int Sum() { return 0; } } public class ChildClass : ParentClass { public override int Sum() { return 1 + base.Sum(); } }[TestMethod] public void RunChildClass() { var childClass = new ChildClass(); Mock.Arrange(() => childClass.Sum()).Returns(2); // want to override ParentClass.Sum(), not ChildClass.Sum(). var result = childClass.Sum(); Assert.IsTrue(result == 3); // instead I will get 2 here. }
[Test]public void RunCompleteDivxJob_Negative_Exception(){ DebugView.IsTraceEnabled = true; var mediaId = 2000999; var mediaTypeId = (int)CmtMediaType.Video; var queueCmtId = 9999; var cmtFileType = CmtFileType.SourceMediaFile; var statusError = CmtQueueStatus.Error; var exception = new Exception("test"); // ARRANGE var encodeJobStateMachineManager = Mock.Create<EncodeJobStateMachineManager>(Behavior.CallOriginal); var logger = Mock.Create<Logger>(Behavior.CallOriginal, typeof(EncodeJobStateMachineManager)); var inst = new PrivateAccessor(encodeJobStateMachineManager); inst.SetProperty("_log", logger); var createCompleteJobCalled = false; Mock.Arrange(() => DivxEncodeJob.CreateCompleteJob(mediaId, mediaTypeId, queueCmtId, cmtFileType)) .DoInstead(() => createCompleteJobCalled = true); Mock.Arrange(() => encodeJobStateMachineManager.EncodeJob.Submit()).Throws(exception).MustBeCalled(); logger.Arrange(x => x.Error(Arg.AnyString, exception)).MustBeCalled(); //Mock.SetupStatic(typeof(QueueDAO)); var updateQueueStatusCalled = false; Mock.Arrange(() => QueueDAO.UpdateQueueStatus(queueCmtId, statusError)).DoInstead(() => updateQueueStatusCalled = true); // ACT encodeJobStateMachineManager.RunCompleteDivxJob(mediaId, mediaTypeId, queueCmtId, cmtFileType); // ASSERT Mock.Assert(encodeJobStateMachineManager); Assert.IsTrue(createCompleteJobCalled); Assert.IsTrue(updateQueueStatusCalled);}Mock.Arrange(() => DivxEncodeJob.CreateCompleteJob(mediaId, mediaTypeId, queueCmtId, cmtFileType)) .DoInstead(() => createCompleteJobCalled = true);Mock.Arrange(() => QueueDAO.UpdateQueueStatus(queueCmtId, statusError)).DoInstead(() => updateQueueStatusCalled = true);01.public class Manager02.{03. public Job Job {get;set;}04. 05. public void RunCompleteJob(int arg1, int arg2, int arg3, string arg4) 06. {07. Job = MyStaticClass.CreateCompleteJob(arg1, arg2, arg3, arg4);08. Job.Submit();09. ExecuteJobStates();10. }11.}01.[Test]02.public void RunCompleteJob_Success()03.{04. var arg1 = 2000999;05. var arg2 = 12345;06. var arg3 = 9999;07. var arg4 = "filepath;08. 09. var manager = Mock.Create<Manager>(Behavior.CallOriginal);10. Mock.SetupStatic(typeof(MyStaticClass), Behavior.Strict, StaticConstructor.Mocked);11. Mock.Arrange(() => MyStaticClass.CreateCompleteJob(arg1, arg2, arg3, arg4))12. .Returns(new Job13. {14. JobProcessTypeParameters = new JobParameters(),15. JobType = JobType.Complete,16. MediaId = arg117. });18. Mock.Arrange(() => manager.Job.Submit()).MustBeCalled();19. Mock.NonPublic.Arrange(manager, "ExecuteJobStates").MustBeCalled();20. 21. manager.RunCompleteJob(arg1, arg2, arg3, arg4);22. 23. Mock.Assert(manager);24. Assert.AreEqual(arg1, manager.Job.MediaId);25.}[TestFixture]public class Class1Fixture{ [Test] public void Len_Returns_Length() { //Arrange var mockDummy = Mock.Create<IDummy>(); var x = new Class1(mockDummy); //Act var result = x.Len("test"); //Assert Assert.AreEqual(4, result); }}public interface IDummy{ }public class Class1{ public Class1(IDummy dummy) { } public int Len(string input) { if (string.IsNullOrWhiteSpace(input)) return 0; return input.Length; }}