Mocks, .
(, rhino mocks)
,
- , (, ) ( ) , .
, - , , . 2 (IStringAnalyzer ILooger):
class SomeClass
{
IStringAnalyzer stringAnalizer;
ILogger logger;
public SomeClass(IStringAnalyzer stringAnalyzer, ILogger logger)
{
this.logger = logger;
this.stringAnalyzer = stringAnalyzer;
}
public void SomeMethod(string someParameter)
{
if (stringAnalyzer.IsValid(someParameter))
{
logger.Log("Invalid string");
}else
{
}
}
}
, SomeClass SomeMethod , ILogger " ".
"" IStringAnalyzer ILogger, , , , , , . , , , - , .
: IStringAnalyzer ILogger, . , . IStringAnalyzer , , , false, , . (someParameter).
ILogger , , "Invalid string", .
IStringAnalyzer ILogger "" ( ), - Stub (IStringAnalyzer), - (ILogger). , , ( IStringAnalyzer IsValid false). , ( ILogger). ( ) ( , ). , ( ). .
"", :
class StringAnalyzerStub : IStringAnalyzer
{
public bool whatToReturn;
public StubStringAnalyzerStub(bool whatToReturn)
{
this.whatToReturn = whatToReturn;
}
public bool IsValid(string parameter)
{
return whatToReturn;
}
}
class LoggerMock : ILogger
{
public string WhatWasPassedIn;
public void Log(string message)
{
WhatWasPassedIn = message;
}
}
:
[Test]
public void SomeMethod_InvalidParameter_CallsLogger
{
IStringAnalyzer s = new StringAnalyzerStub(false);
ILogger l = new LoggerMock();
SomeClass someClass = new SomeClass(s, l);
someClass.SomeMethod("What you put here doesnt really matter because the stub will always return false");
Assert.AreEqual(l.WhatWasPassedIn, "Invalid string");
}
, , , , , , Rhino Mocks. mocks stub, Rhino Mocks ( arr, act, assert):
[Test]
public void SomeMethod_InvalidParameter_CallsLogger
{
Rhino.Mocks.MockRepository mockRepository = new Rhino.Mocks.MockRepository();
IStringAnalyzer s = mockRepository.Stub<IStringRepository>();
s.Expect(s => s.IsValid("something, doesnt matter").IgnoreParameters().Return(false);
ILogger l = mockRepository.DynamicMock<ILogger>();
l.Log("Invalid string");
SomeClass someClass = new SomeClass(s, l);
mockRepository.ReplayAll();
someClass.SomeMethod("What you put here doesnt really matter because the stub will always return false");
l.AssertWasCalled(l => l.Log("Invalid string"));
}
, :)
: , ...