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
Manager
02.
{
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
Job
13.
{
14.
JobProcessTypeParameters =
new
JobParameters(),
15.
JobType = JobType.Complete,
16.
MediaId = arg1
17.
});
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;
}
}
using
System;
using
System.Threading.Tasks;
using
Telerik.JustMock;
using
Xunit;
namespace
Test
{
public
class
ClassTests
{
public
interface
IAsync
{
Task<String> MyTask();
}
[Fact]
public
async Task fails_due_to_timeout()
{
var mocked = Mock.Create<IAsync>();
var result = await mocked.MyTask();
}
[Fact]
public
async Task passes()
{
var mocked = Mock.Create<IAsync>();
Mock.Arrange(() => mocked.MyTask()).Returns(Task.FromResult<String>(
null
));
var result = await mocked.MyTask();
}
}
}