or
01.
using
System.Collections.Generic;
02.
03.
namespace
JustMock_AutoContainer
04.
{
05.
public
interface
IWorker
06.
{
07.
void
DoSomething();
08.
}
09.
10.
public
interface
IService
11.
{
12.
string
Moo {
get
; }
13.
14.
void
DoLotsOfThings();
15.
}
16.
17.
public
class
Service : IService
18.
{
19.
private
readonly
IList<IWorker> workers;
20.
21.
public
Service(IList<IWorker> workers,
string
moo)
22.
{
23.
this
.workers = workers;
24.
this
.Moo = moo;
25.
}
26.
27.
public
string
Moo {
get
;
private
set
; }
28.
29.
public
void
DoLotsOfThings()
30.
{
31.
foreach
(var worker
in
this
.workers)
32.
{
33.
worker.DoSomething();
34.
}
35.
}
36.
}
37.
}
01.
using
JustMock_AutoContainer;
02.
using
Microsoft.VisualStudio.TestTools.UnitTesting;
03.
using
System.Collections.Generic;
04.
using
Telerik.JustMock;
05.
using
Telerik.JustMock.AutoMock;
06.
using
Telerik.JustMock.Helpers;
07.
08.
namespace
JustMock_AutoContainer_Tests
09.
{
10.
[TestClass]
11.
public
class
ServiceTest
12.
{
13.
#region Fields
14.
private
MockingContainer<Service> container;
15.
#endregion
16.
17.
#region Test Configuration
18.
[TestInitialize]
19.
public
void
CreateTargetContainer()
20.
{
21.
this
.container =
new
MockingContainer<Service>();
22.
}
23.
#endregion
24.
25.
[TestMethod]
26.
public
void
DoLotsOfWork_TwoWorkers_AllWorkersCalled()
27.
{
28.
// Arrange
29.
var provider1 = StubWorker();
30.
var provider2 = StubWorker();
31.
var target =
this
.CreateTarget(provider1, provider2);
32.
33.
// Act
34.
target.DoLotsOfThings();
35.
36.
// Assert
37.
Assert.AreEqual(
"moo"
, target.Moo);
38.
provider1.Assert(p => p.DoSomething());
// Fails here :(
39.
provider2.Assert(p => p.DoSomething());
40.
}
41.
42.
#region Support Methods
43.
private
static
IWorker StubWorker()
44.
{
45.
var dataTraceProvider = Mock.Create<IWorker>();
46.
return
dataTraceProvider;
47.
}
48.
49.
private
IService CreateTarget(
params
IWorker[] providers)
50.
{
51.
this
.container
52.
.Bind<IList<IWorker>>()
53.
.ToConstant((IList<IWorker>)providers);
54.
55.
//TODO: fix line above; the list is not being picked up in the target.
56.
// JustMock seems keen on giving us a list with one and only one item in it, rather than
57.
// what we've registered above.
58.
this
.container
59.
.Bind<
string
>()
60.
.ToConstant(
"moo"
);
61.
62.
return
this
.container.Instance;
63.
}
64.
65.
#endregion
66.
}
67.
}
public
interface
IService2
{
string
MethodWithArgs(
string
one,
string
two);
}
[TestMethod]
public
void
SubbingMethodwithArgs_DontCareAboutValues_StubbedMethodCalled()
{
var service = StubMethodWithArgs(
"rv"
);
var actual = service.MethodWithArgs(
"a"
,
"b"
);
Assert.AreEqual(
"rv"
, actual);
}
private
static
IService2 StubMethodWithArgs(
string
returnValue,
string
expectedOne =
null
,
string
expectedTwo =
null
)
{
var service = Mock.Create<IService2>();
service
.Arrange(s => s.MethodWithArgs(
null
!= expectedOne ? Arg.Is(expectedOne) : Arg.AnyString,
// null coalesance (??) doesn't work either
null
!= expectedTwo ? Arg.Is(expectedTwo) : Arg.AnyString))
.Returns(returnValue);
return
service;
}
01.
public
abstract
class
SimpleBaseClass
02.
{
03.
private
readonly
IService service;
04.
protected
SimpleBaseClass(IService service)
05.
{
06.
this
.service = service;
07.
}
08.
public
void
CallServiceMethod()
09.
{
10.
this
.service.DoLotsOfThings();
11.
}
12.
}
01.
[TestMethod]
02.
public
void
AutoMock_AbstractClass_CallsMethod()
03.
{
04.
var container =
new
MockingContainer<SimpleBaseClass>();
05.
//container.Bind<SimpleBaseClass>().ToMock(); // Still fails :(
06.
container.Arrange<IService>(s => s.DoLotsOfThings()).MustBeCalled();
07.
08.
container.Instance.CallServiceMethod();
09.
10.
container.AssertAll();
11.
}
12.
13.
[TestMethod]
14.
public
void
CreateMock_AbstractClass_CallsMethod()
15.
{
16.
var service = Mock.Create<IService>();
17.
var target = Mock.Create<SimpleBaseClass>(Behavior.CallOriginal, service);
18.
19.
target.CallServiceMethod();
20.
21.
service.Assert(s => s.DoLotsOfThings());
22.
}
// Arrange mock data.
var service =
new
ScheduledTaskService();
var start =
new
DateTime(2014, 08, 15);
var due = start.Next(DayOfWeek.Thursday);
var assignee =
new
SimpleEmployeeView {Id = 1, LastNameFirstName =
"Test User"
, IsActive =
true
};
var taskModel =
new
ScheduledTaskModel()
{
DaysBeforeDue = 5,
Start = start,
End = due,
Title =
"Test Subject"
,
Description =
"Test Description"
,
Id = 999
};
Mock.NonPublic.Arrange(service,
"CreateTaskForAssignee"
, taskModel, assignee);
var database = Mock.Create<Database>();
Mock.Arrange(database, d => d.SaveChanges()).DoNothing();
// TODO test for changes in the result.