c# itextsharp pdfreader not opened with owner password : Cut pages out of pdf online SDK Library service wpf .net web page dnn The%20Art%20of%20Unit%20Testing%20with%20Examples%20in%20.NET%20(Manning%202009)14-part1045

Parameter constraints for mocks and stubs
115
mocks.StrictMock<IEmailService>();
using(mocks.Record())
{
stubService.LogError("whatever");
LastCall.Constraints(Is.Anything());
LastCall.Throw(new Exception("fake exception"));
mockEmail.SendEmail("a","subject","fake exception");
}
LogAnalyzer2 log = new LogAnalyzer2();
log.Service = stubService;
log.Email = mockEmail;
string tooShortFileName = "abc.ext";
log.Analyze(tooShortFileName);
mocks.VerifyAll();
}
The nice thing about this test is that it requires no handwritten mocks,
and it’s still readable for the developer.
You might notice a line in listing 5.10 that you haven’t come across yet
?. That’s a parameter constraint that makes sure the exception is
thrown no matter what we send the stub as a parameter. Parameter
constraints are the topic of the next section.
Isolation frameworks enable us to easily test the value of parameters
being passed into our mock objects. In the coming sections, we’ll look
at the various ways you can check parameters, such as strings, proper-
ties, and full object models, using very little code. 
5.6.1 Checking parameters with string constraints
Consider the following scenario. We’d like to test that our 
LogAnalyzer
sends a message of this nature to the error log:
"[Some GUID] Error message"
5.6 Parameter constraints for mocks and stubs
Ensures 
exception 
is thrown
?
Cut pages out of pdf online - remove PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provides Users with Mature Document Manipulating Function for Deleting PDF Pages
delete page on pdf reader; pdf delete page
Cut pages out of pdf online - VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Visual Basic Sample Codes to Delete PDF Document Page in .NET
delete pages of pdf online; delete page on pdf
116
CHAPTER 5
Isolation (mock object) frameworks
Here’s an example:
"33DFCC9D-D6C5-45ea-A520-A6018C88E490 Out of memory"
In our test, we don’t care about the GUID (globally unique identifier)
at the beginning, but we care what the error message is. In fact, we
don’t really have control over the GUID. (We could gain control by
creating some sort of 
IGuidCreator
interface and stubbing it out in the
test, but that might prove a little too much work for what we need.)
Parameter  constraints  allow  us  to  specify  demands  or  rules  to  our
mocks and stubs for each specific parameter to a method call. Isolation
frameworks allow you to create these parameter constraints, and each
framework has its own syntax for doing so. 
The  simplest way to  use  constraints,  as shown  in  listing  5.11, is by
using  the 
LastCall
class  in  conjunction  with  one  of  the  constraints
classes. In our case, it would be the 
Contains
class, which takes as a
constructor the inner string to search for.
Listing 5.11 Using a string constraint in a test
[Test]
public void SimpleStringConstraints()
{
MockRepository mocks = new MockRepository();
IWebService mockService = mocks.CreateMock<IWebService>();
using (mocks.Record())
{
mockService.LogError("ignored string");
LastCall.Constraints(new Contains("abc"));
}
mockService.LogError(Guid.NewGuid() + " abc");
mocks.VerifyAll();
}
Using the 
LastCall.Constraints()
method, we can send in a constraint
object (which has to inherit from 
AbstractConstraint
, defined as part
of Rhino Mocks) for each parameter the method expects. There are
four major “helper” classes for constraints in Rhino Mocks, listed in
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark can view PDF document in single page or continue pages. Support to zoom in and zoom out PDF page.
delete page from pdf file; delete pages pdf online
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
Remove Image from PDF Page. Image: Copy, Paste, Cut Image in can view PDF document in single page or continue pages. Support to zoom in and zoom out PDF page.
delete pages from a pdf file; reader extract pages from pdf
Parameter constraints for mocks and stubs
117
table 5.1. For string-related constraints, we have 
Contains
EndsWith
,
Like
, and 
StartsWith
. All of these classes take a string at the construc-
tor. To help you use these constraints, Rhino Mocks includes a helper
class  called 
Text
that  has  static  methods  to  return  these  constraint
objects.
Here’s the same test using the 
Text
class:
LastCall.Constraints(Text.Contains("abc"));
Table 5.1 The four types of constraints in Rhino Mocks
Helper class
Description
Methods
Text
Checks string-related constraints
Contains(string)
EndsWith(string)
StartsWith(string)
Like(string)
List
Checks collection-related con-
straints
Count(constraint)
Element(int, constraint)
Equal(IEnumerable)
IsIn(object)
OneOf(IEnumerable)
Is
Checks the direct value of param-
eters passed in
Anything()
Equal(object)
GreaterThan(IComparable)
LessThan(IComparable)
Matching<T>(Predicate<T>)
NotNull()
Same(object)
TypeOf(Type)
Property
Checks the value of a specific 
property on an object that’s 
passed in as a parameter
IsNull()
Value(Type, PropertyName, object)
ValueConstraint(Type, 
PropertyName, constraint)
And, Or
Allows combining multiple con-
straints into a single logical con-
straint 
Callback
Allows triggering a custom dele-
gate whenever the method is 
called
VB.NET Image: Image Cropping SDK to Cut Out Image, Picture and
and easy to use .NET solution for developers to crop / cut out image file This online tutorial page will illustrate the image cropping function from following
delete pages from pdf in preview; delete a page from a pdf acrobat
VB.NET PDF Text Extract Library: extract text content from PDF
Extract highlighted text out of PDF document. Best VB.NET PDF text extraction SDK library and component for Online Visual Basic .NET class source code for quick
delete blank pages in pdf online; delete pdf pages in reader
118
CHAPTER 5
Isolation (mock object) frameworks
Some of the more interesting constraints are 
Property
constraints, 
And
and 
Or
constraints,  and 
Callback
constraints. Let’s review them one
by one.
5.6.2 Checking parameter object properties with constraints
Assume that  the 
IWebService
interface  has a method  that expects to
take in a 
TraceMessage
object, which contains specific rules about its
properties. We could easily check the values of the passed-in 
TraceMes-
sage
object properties by using the 
Property
-related constraints. This is
shown in listing 5.12.
Listing 5.12 Using the Property constraints by using the Property static class
[Test]
public void ConstraintsAgainstObjectPropeties()
{
MockRepository mocks = new MockRepository();
IWebService mockservice = mocks.CreateMock<IWebService>();
using (mocks.Record())
{
mockservice.LogError(new TraceMessage("",0,""));
LastCall.Constraints(
Property.Value("Message", "expected msg")
&& Property.Value("Severity", 100)
&& Property.Value("Source", "Some Source"));
}
mockservice.LogError(new TraceMessage("",1,"Some Source"));
mocks.VerifyAll();
}
Notice the use of the 
&&
operators here.
Combining constraints with AND and OR
The 
&&
operators in listing 5.12 are overloaded to use a special 
And
con-
straint, which requires 
all
of these constraints to be 
true
for the test to
pass. You could also use the 
||
overload to set a special 
Or
constraint,
which only requires 
one
of the constraints to be 
true
.
The 
And
and 
Or
constraints both take two 
AbstractConstraint
objects in
their constructor. The previous example in listing 5.12 combines two
And
constraints and could have been written as in listing 5.13.
Checks 
property 
values
C# PDF Text Extract Library: extract text content from PDF file in
Free online source code for extracting text from adobe Ability to extract highlighted text out of PDF C# example code for text extraction from all PDF pages.
cut pages from pdf; delete pages pdf
VB.NET PDF - View PDF with WPF PDF Viewer for VB.NET
Image from PDF Page. Image: Copy, Paste, Cut Image in PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET Abilities to zoom in and zoom out PDF page.
delete a page from a pdf reader; delete pages pdf document
Parameter constraints for mocks and stubs
119
Listing 5.13 Combining constraints with And and Or 
And combined1 = 
new And(
Property.Value("Message", "expected msg" ),
Property.Value("Severity", 100));
And combined2 = 
new And(combined1,
Property.Value("Source", "Some Source"));
LastCall.Constraints(combined2);
As you can see, this sort of syntax can get messy pretty fast, and I don’t
have much use for it. This is where using a manual stub or a callback
can make things much clearer, instead of using the 
And
/
Or
syntax.
Comparing full objects against each other
If we’re going to test things in the simplest way, we could compare two
objects.  We  could  send  the  “expected”  object  with  all  the  expected
properties  set  as  part  of  the  recording  process  (no  need  for  con-
straints), and then call 
verify()
, as shown in listing 5.14.
Listing 5.14 Comparing full objects 
[Test]
public void TestingObjectPropertiesWithObjects()
{
MockRepository mocks = new MockRepository();
IWebService mockservice = mocks.CreateMock<IWebService>();
using (mocks.Record())
{
mockservice.LogError(
new TraceMessage("Some Message",100,"Some Source"));
}
mockservice.LogError(new TraceMessage("",1,"Some Source"));
mocks.VerifyAll(); //this should fail the test
}
Testing full objects only works for cases where
it’s easy to create the object with the expected properties.
you want to test all the properties of the object in question.
C# WPF PDF Viewer SDK to view PDF document in C#.NET
Image from PDF Page. Image: Copy, Paste, Cut Image in PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET Abilities to zoom in and zoom out PDF page.
delete pdf pages in preview; delete blank pages in pdf files
C# PDF Form Data fill-in Library: auto fill-in PDF form data in C#
Free online C# sample code can help users to fill in fill in form field in specified position of adobe PDF file. Able to fill out all PDF form field in C#.NET.
delete page pdf file; delete page numbers in pdf
120
CHAPTER 5
Isolation (mock object) frameworks
you know the exact values of each constraint.
the 
Equals()
method is  implemented  correctly  on  the  two  objects
being compared. (It’s usually bad practice to rely on the out-of-the-
box implementation of 
object.Equals().
)
5.6.3 Executing callbacks for parameter verification
The 
Is.Matching<T>(Predicate<T>)
constraint  is  a  powerful  feature
that allows the developer to test whatever he wants against the passed-
in parameter, and return 
true
or 
false
based on complex rules.
For example, assume that the 
IWebService
interface has a method that
expects to take in a 
TraceMessage
object, which in turn has a property
that holds an object you’d like to check. If we had a 
ComplexTraceMes-
sage
class with an 
InnerMessage
property and a complex verification on
it, it might look like listing 5.15.
Listing 5.15 Using an anonymous delegate to verify a parameter
LastCall.Constraints(
Is.Matching<ComplexTraceMessage>(
delegate(ComplexTraceMessage msg)
{
if (msg.InnerMessage.Severity < 50
&& msg.InnerMessage.Message.Contains("a"))
{
return false;
}
return true;
}));
In listing 5.15, we’re creating a delegate that holds the logic to verify
the complex parameter structure. 
Instead of using a delegate, we could create a method with the same
signature that does the same thing, as shown in listing 5.16.
Listing 5.16 Using a regular method instead of an anonymous delegate
[Test]
public void ComplexConstraintsWithCallbacks()
{
VB.NET PDF- HTML5 PDF Viewer for VB.NET Project
Remove Image from PDF Page. Image: Copy, Paste, Cut Image in NET comment annotate PDF, VB.NET delete PDF pages, VB.NET PDF page and zoom in or zoom out PDF page
add and delete pages in pdf online; delete a page from a pdf file
VB.NET PDF - WPF PDF Viewer for VB.NET Program
Image from PDF Page. Image: Copy, Paste, Cut Image in Online Guide for Using RasterEdge WPF PDF Viewer to View PDF pages, zoom in or zoom out PDF pages and go to
cut pages out of pdf file; delete blank page from pdf
Testing for event-related activities
121
...
using (mocks.Record())
{
mockservice.LogError(new TraceMessage("", 0, ""));
LastCall.Constraints(
Is.Matching<ComplexTraceMessage>(verifyComplexMessage));
}
...
}
private bool verifyComplexMessage(ComplexTraceMessage msg)
{
if (msg.InnerMessage.Severity < 50
&& msg.InnerMessage.Message.Contains("a"))
{
return false;
}
return true;
}
Rhino Mocks has a simpler syntax if you’re only testing a method that
accepts a single parameter. Instead of using this syntax,
LastCall.Constraints(
Is.Matching<ComplexTraceMessage>(verifyComplexMessage));
you can write this:
LastCall.Callback(verifyComplexMessage);
Next, we’ll see how to test whether objects raise events properly, or
whether other objects have registered for an event properly. 
Testing event-related actions has always been one of the gaping holes
in isolation frameworks and has required manual workarounds to test
things  such  as  whether  an  object  registered  to  get  an  event  from
another object, or whether an object triggered an event when it should
have. Rhino Mocks has facilities to help in these areas as well.
The first scenario we’ll tackle is checking whether an object registered
to receive an event from another object.
5.7 Testing for event-related activities
122
CHAPTER 5
Isolation (mock object) frameworks
5.7.1 Testing that an event has been subscribed to
Let’s assume  we have a 
Presenter
class that needs to register to the
Load
event of a view class it receives. The code for presenter might look
like listing 5.17.
Listing 5.17 Testing that an event was registered properly
public class Presenter
{
IView view;
public Presenter(IView view)
{
this.view = view;
this.view.Load += new EventHandler(view_Load);
}
void view_Load(object sender, EventArgs e)
{
throw new Exception("Not implemented.");
}
}
[Test]
public void VerifyAttachesToViewEvents()
{
MockRepository mocks = new MockRepository();
IView viewMock = (IView)mocks.CreateMock(typeof(IView));
using (mocks.Record())
{
viewMock.Load += null;
LastCall.IgnoreArguments();
}
new Presenter(viewMock);
mocks.VerifyAll();
}
During the recording stage, we overload the 
Load
event 
?
. Then we
make sure we ignore the arguments in the call, and make sure the call
happened w.
Some people find that testing whether an event was subscribed to is
helpful, but knowing that someone has registered to an event doesn’t
Registers for 
real event
?
Records expected 
event registration
w
Testing for event-related activities
123
mean she did something meaningful with it. It’s not a real functional
requirement that’s tested here. If I were doing a test  review, I’d say
that this was not needed. Instead, you should test that something hap-
pened in response to the event being triggered. 
To test this scenario as part of a functional requirement, we could say
that, upon getting the 
Load
event, the presenter’s production code will
do something that we can see from our test (write to a log, for exam-
ple). To get that something to happen, we need to find a way to trigger
the event from within the stub object and see if the presenter does that
action in response. That’s what the next section is about.
5.7.2 Triggering events from mocks and stubs
Listing  5.18  shows a test that makes  sure 
Presenter
writes  to  a  log
upon getting an event from our stub. It also uses a class called 
Even-
tRaiser
, which triggers the event from the interface.
Listing 5.18 Triggering an event via the EventRaiser class in Rhino Mocks
[Test]
public void TriggerAndVerifyRespondingToEvents()
{
MockRepository mocks = new MockRepository();
IView viewStub = mocks.Stub<IView>();
IWebService serviceMock = 
mocks.CreateMock<IWebService>(); 
using (mocks.Record())
{
serviceMock.LogInfo("view loaded");
}
new Presenter(viewStub,serviceMock);
IEventRaiser eventer = 
EventRaiser.Create(viewStub, "Load");
eventer.Raise(null,EventArgs.Empty);
mocks.Verify(serviceMock);
}
Uses stub 
for event
triggering
?
Uses mock to 
check log call
w
Creates 
event 
raiser
Triggers event
124
CHAPTER 5
Isolation (mock object) frameworks
Another way of getting an 
EventRaiser
object is by using the recording
mechanism:
IEventRaiser eventer;
using (mocks.Record())
{
viewStub.Load += null;
eventer = LastCall.GetEventRaiser();
}
Notice in listing 5.18 that we’re using a stub ? to trigger the event, and
a mock w to check that the service was written to. The 
EventRaiser
takes a stub or a mock and the name of the event to raise from that stub
or mock. The 
Raise()
method of 
EventRaiser
takes a 
params
object[]
array  that  requires  you  to  send  the  number  of  parameters  that  the
event signature requires. The verification of whether the message was
received happened against the mock service.
Now,  let’s  take  a  look  at  the  opposite  end  of  the  testing  scenario.
Instead of testing the subscriber, we’d like to make sure that the event
source triggers the event at the right time. The next section shows how
we can do that.
5.7.3 Testing whether an event was triggered
There are two basic approaches to testing that an event was triggered.
One is simple, but only works in C#, and the other takes a bit more
work,  but  will  work  in  VB.NET.  First,  let’s  look  at  the  simplest
way—using a handwritten anonymous method.
Testing event firing inline
A simple way to test the event is by manually registering to it inside the
test method using an anonymous delegate. Listing 5.19 shows a simple
example.
Listing 5.19 Using an anonymous delegate to register to an event 
[Test]
public void EventFiringManual()
{
bool loadFired = false;
Documents you may be interested
Documents you may be interested