Thursday, June 09, 2005

TDD Design Starter Kit - State vs. Interaction Testing

When you write a unit test, what is it that your asserting? Most of the time you're doing state-based testing, i.e. your unit tests either validates a return value from a method call or a change in a property of the class being tested. Here is a typical example of state-based testing like you'll find in almost every introductory TDD article ever published.



[TestFixture]
public class StateTester
{
[Test]
public void TwoPlusThreeIsFive()
{
RunningSum sum = new RunningSum();
int actual = sum.AddIntegers(2, 3);

Assert.AreEqual(5, actual);
}

[Test]
public void AddSeveralNumbersAndGetTheRunningSum()
{
RunningSum sum = new RunningSum();
sum.AddInteger(2);
sum.AddInteger(3);
sum.AddInteger(5);

Assert.AreEqual(10, sum.Total);
}
}


Easy money, all you have to do is check an expected outcome for a known set of inputs. Unfortunately, the real world of enterprise software development quickly intrudes into your newfound TDD bliss. Toss in a bunch of dependencies external to your application and you quickly find that:

  1. The expected outcome is difficult or time-consuming to verify in an automated test
  2. The known inputs are difficult or time-consuming to setup in an automated test
  3. Tests that depend on external services can be brittle or just plain slow
  4. Measuring the outcome requires checking the state of all a class's dependencies, often making the unit tests too coarse and dependent upon the actual implementation details
  5. Too many classes have to be involved in the unit test

Teams abandon TDD as a failure when the tests are too difficult to write or just plain laborious. Nobody is going to willingly use a technique that is more bang than buck.

One way to alleviate the problem is to use interaction-based testing. Just like it sounds, interaction-based testing is verifying the expected interaction between a class and its dependencies. Typically you would use either a mock or a stub object as a stand-in for the real dependency. The unit test will verify that the expected interaction via method calls took place.

To illustrate the difference between testing state or interaction, here's a somewhat contrived user story (for best results, user stories should really be much finer grained than this):

Email Alert for Invoice Validation Failures User Story

  • When an invoice is being processed, if certain nebulous validation failure conditions are met, send an email to the accounts payable individual assigned to the invoice. The email should list all of the invoice errors in a certain html format.
  • If the invoice is really, really bad, send a summary email to the proper expediter. The email message will be html formatted in a particular manner.
  • If the invoice is successfully validated, publish the invoice (via MSMQ)

Here's a possible C# class for this story designed with absolutely no regard for testability.



public class InvoiceProcessor
{
public void ProcessInvoices(Invoice[] invoices)
{
InvoiceErrorReport report = new InvoiceErrorReport();

foreach (Invoice invoice in invoices)
{
// Execute the validation business logic
InvoiceError[] invoiceErrors = this.validateQuantities(invoice);
report.StoreErrors(invoice, invoiceErrors);
}

// determine if the critical error threshold has been exceeded
if (this.hasTooManyCriticalErrors())
{
MailMessage message = this.createErrorSummaryMessage(report);

// Call to the local (or default) SMTP service to send the email
SmtpMail.Send(message);
}
// determine if the warning threshold for the error count has been reached
else if (this.hasTooManyErrors())
{
MailMessage message = this.createDetailsMessage(report);
SmtpMail.Send(message);
}
else
{
// If the invoices are okay, send the invoices on to the next process via MSMQ
MessageQueue queue = new MessageQueue(this.getMessageQueuePath());
queue.Send(invoices);
}
}


public MailMessage createErrorSummaryMessage(InvoiceErrorReport report)
{
MailMessage email = new MailMessage();

// Go get the user email addresses from the user information storage
// (database or Active Directory)
UserInformationStore userStore = new UserInformationStore();
email.To = userStore.GetEmailAddressesForInvoices(report);

email.Body = this.createErrorSummaryMessageBody(report);

return email;
}

// #region Other Methods
}


We could use a state-based strategy to test the email. We could run the test, then run around and ask the expected recipients to check their inbox (don't laugh too hard, I've been a party to this). Since we do want an automated test, we could query the Exchange server to see if the email was sent out correctly, but I'd rather gouge out my eyeballs with a dull spoon or code in Fortran 77 than attempt this (not to mention the look of apoplexy on the sysadmin's face when I ask for administrative rights to the Exchange server). You could also check an audit trail, but that's not the real functionality being tested.

The easiest approach in the case of the email tests is to use interaction testing to verify that the email was sent to the SMTP service. Now look at the same class, but somewhat more testable because it is designed for interaction testing between the class and the SMTP service.



public class InvoiceProcessor
{
// "Dependency Inversion Principle" -- All dependencies are now to an abstracted interface
private readonly IEmailGateway _emailGateway;
private readonly IMessagingGateway _messagingGateway;
private readonly IUserInformationStore _userStore;

// Use "Constructor Injection" to push dependencies into InvoiceProcessor
public InvoiceProcessor(
IEmailGateway emailGateway,
IMessagingGateway messagingGateway,
IUserInformationStore userStore)
{
_emailGateway = emailGateway;
_messagingGateway = messagingGateway;
_userStore = userStore;
}



public void ProcessInvoices(Invoice[] invoices)
{
InvoiceErrorReport report = new InvoiceErrorReport();

foreach (Invoice invoice in invoices)
{
// Execute the validation business logic
InvoiceError[] invoiceErrors = this.validateQuantities(invoice);
report.StoreErrors(invoice, invoiceErrors);
}

// determine if the critical error threshold has been exceeded
if (this.hasTooManyCriticalErrors())
{
MailMessage message = this.createErrorSummaryMessage(report);
_emailGateway.SendMail(message);
}
// determine if the warning threshold for the error count has been reached
else if (this.hasTooManyErrors())
{
MailMessage message = this.createDetailsMessage(report);
_emailGateway.SendMail(message);
}
else
{
// no longer responsible for knowing where the MSMQ path is. Or even if this
// is an MSMQ
_messagingGateway.SendInvoices(invoices);
}
}


public MailMessage createErrorSummaryMessage(InvoiceErrorReport report)
{
MailMessage email = new MailMessage();

// Go get the user email addresses from the user information storage
//(database or Active Directory)
email.To = _userStore.GetEmailAddressesForInvoices(report);

email.Body = this.createErrorSummaryMessageBody(report);

return email;
}

// Other methods ...
}



public interface IMessagingGateway
{
public void SendInvoices(Invoice[] invoices);
}

public interface IEmailGateway
{
public void SendMail(MailMessage message);
}


What's different here? First, I used the Dependency Inversion Principle to encapsulate the interaction with the SMTP email service and the MSMQ queue behind .Net interfaces (IEmailGateway and IMessagingGateway). The second change was to use Dependency Injection to push in the IEmailGateway and IMessagingGateway dependencies into the constructor function. Here's what a unit test might look like to test the email and MSMQ interaction using NMock to create mock objects as placeholders for the real dependencies.




[Test]
public void SendTheSummaryEmailIfTheCriticalErrorThresholdIsMet()
{
// 1.) Create the NMock objects
DynamicMock messagingMock = new DynamicMock(typeof(IMessagingGateway));
DynamicMock emailMock = new DynamicMock(typeof(IEmailGateway));
DynamicMock userStoreMock = new DynamicMock(typeof(IUserInformationStore));

// Setup the test data
Invoice[] invoices =
this.setUpArrayOfInvoicesThatWillSpawnACriticalNumberOfInvoiceErrors();

// 2.) Setup the expectations. Gets the email
// addresses, sends an email address, but does not put the invoice array onto
// the outgoing queue
emailMock.ExpectAndReturn(
"GetEmailAddressesForInvoices",
"somebody@somewhere.com",
new IsTypeOf(typeof(InvoiceErrorReport)));

messagingMock.ExpectNoCall("SendInvoices", typeof(Invoice[]));
emailMock.Expect("SendMail", new IsTypeOf(typeof(MailMessage)));

// 3.) Create the InvoiceProcessor object with the Mock instances
InvoiceProcessor processor = new InvoiceProcessor(
(IEmailGateway) emailMock.MockInstance,
(IMessagingGateway) messagingMock.MockInstance,
(IUserInformationStore) userStoreMock.MockInstance);

// 4.) Execute
processor.ProcessInvoices(invoices);

// 5.) Verify the correct calls were made
messagingMock.Verify();
emailMock.Verify();
userStoreMock.Verify();
}

All I've really tested in this unit test is that the InvoiceProcessor sent the proper signals to the IEmailGateway and IMessagingGateway interfaces. The test is way too coarse, but I had to leave something for later posts.

State or Interaction Testing, Which Do I Want to Use?

Not to be flippant, but use whichever mode of testing is easiest to apply on a unit test by unit test basis. Both styles of testing need to be in your intellectual toolbox. State-based testing is generally easier because of the overhead associated with setting up the mock objects, but interaction-based testing is essential for dealing with external dependencies like databases or middleware and user interface testing. I'll blog much more in the near future about how to maximize testability by design.

What Next?

The InvoiceProcessor structure above is better, but it can still be improved. The next step is to carefully consider how responsibilities can be assigned to classes to make testing easier. Design concepts like Inversion of Control and Dependency Injection (DI is a subset of IoC) can help tremendously to improve testability by reducing coupling. One of the best design philosophies is to quarantine external dependencies into narrow Gateway classes to minimize direct coupling to external code. It's also helpful to understand the best practices for using mocks or stubs. In my next set of blog posts, I'm going to further refine the invoice processing user story.

TDD Design Starter Kit Roadmap

  1. Assigning Responsibilities
  2. Inversion of Control
  3. Dependency Injection (with and without a Container)
  4. Gateway Pattern
  5. Mocks and Stubs - Best Practices

More Information

Read more about this from Nat Pryce and Martin Fowler. I actually disagree a bit with Fowler's discussion of interaction testing, so no more calling me a "Fowlbot" for a little while.



UPDATE 6/11/2005: Martin Fowler dinged me a little bit about this one. His main point about the difference in testing styles is that state-based testers use mocks or stubs for exceptional cases and interaction-based testers will try to use mocks in almost every case, including domain model classes. Once you put it that way, I'd lean more towards the state-based testing approach. Mocks get you out of tight spots, but overuse is a bad, bad thing.

98 Comments:

Anonymous Anonymous said...

Nice site!
[url=http://hkpgarhp.com/fvud/imcm.html]My homepage[/url] | [url=http://trxwlrwf.com/tynt/onie.html]Cool site[/url]

11:00 AM, September 13, 2006  
Anonymous Anonymous said...

Thank you!
My homepage | Please visit

11:00 AM, September 13, 2006  
Anonymous Anonymous said...

Well done!
http://hkpgarhp.com/fvud/imcm.html | http://raqpikak.com/sfec/hryb.html

11:00 AM, September 13, 2006  
Anonymous Anonymous said...

What am I to do?
hydrocodone prescription

9:26 AM, December 29, 2006  
Anonymous Anonymous said...

free hentai shemale free hentai shemale free hentai shemale free hentai shemale

This a good link's !
Posted by Admin

11:38 PM, January 25, 2007  
Anonymous Anonymous said...

hentai sex picture hentai sex picture hentai sex picture hentai sex picture

This a good link's !
Posted by Admin

12:29 PM, January 29, 2007  
Anonymous Anonymous said...

hentai bdsm index movie
hentai bdsm heat
hentai bdsm gay latex
hentai bdsm free lesbian story
hentai bdsm female sadistic
hentai bdsm enema from hell
hentai bdsm domina free granny plumper
hentai bdsm cyberage only platinum site
hentai bdsm comic extreme japanese

hentai young bbs
hentai vagina tgp
hentai naturist bbs
porno hentai
bbs hentai
pre teen hentais
free bbs hentais
incest art
teen incest
3d incest art
incest mom and son

4:58 AM, January 30, 2007  
Anonymous Anonymous said...

Auto show
Detroit Auto_Show
Car Insurance Agent
Car Insuranc _Agent
Great Drives
In Gear
Car New Models
Racing
CONVERTIBLES
COUPES
MINIVANS
PICKUPS
SEDANS
SUVs
WAGONS HATCHBACKS
Video Galleries

12:00 PM, February 02, 2007  
Anonymous Anonymous said...

lolita chin
lolitas 13
lolitas kid
free anal sex
lolita picture
lolita suck
lolita cp terra loltobbs ftp lol
lolita vip lolitas virgins bbs
lolita lolly fuck movie children
lolita chin
lolitas 13
lolitas kid
free anal sex
lolita picture
lolita suck
lolita cp terra loltobbs ftp lol
lolita vip lolitas virgins bbs
lolita lolly fuck movie children

3:09 PM, February 12, 2007  
Anonymous Anonymous said...

lolita chin
lolitas 13
lolitas kid
free anal sex
lolita picture
lolita suck
lolita cp terra loltobbs ftp lol
lolita vip lolitas virgins bbs
lolita lolly fuck movie children
lolita chin
lolitas 13
lolitas kid
free anal sex
lolita picture
lolita suck
lolita cp terra loltobbs ftp lol
lolita vip lolitas virgins bbs
lolita lolly fuck movie children

6:04 AM, February 13, 2007  
Anonymous Anonymous said...

Lolita
Young Lolita
Nude stories
Nymphets

6:57 AM, February 14, 2007  
Anonymous Anonymous said...

preteen
free bbs
little angels
porn gallery

12:47 PM, February 16, 2007  
Anonymous Anonymous said...

by death hanging hussein picture saddam

11:55 PM, February 16, 2007  
Anonymous Anonymous said...

Gutten TAG!
Very like it!
I like it a lot! Good work, keep it up. Tomorrow I shall return again.
Try this - very useful:
http://onlinecasinos-online.blogspot.com/ online casinos
http://onlinecasinos-here.blogspot.com/ onlinecasinos
http://craps-onl.blogspot.com/ craps
http://gambling-online-s.blogspot.com/ gambling online
http://ws-poker.blogspot.com/ world series of poker
Buy!

7:33 AM, February 19, 2007  
Anonymous Anonymous said...

continentalairlines

10:18 AM, February 24, 2007  
Anonymous Anonymous said...

weekend cruise deals

3:31 PM, February 24, 2007  
Anonymous Anonymous said...

Hi
Thank you for a wonderful website.
Nice work you've done here. Tomorrow I shall return again.
Sponsored links:
http://onlinecasinos-online.blogspot.com/ online casinos
http://onlinecasinos-here.blogspot.com/ onlinecasinos
http://craps-onl.blogspot.com/ craps
http://gambling-online-s.blogspot.com/ gambling online
http://ws-poker.blogspot.com/ world series of poker
Thank's!

11:17 AM, February 25, 2007  
Anonymous Anonymous said...

She pulls away from him and hops up onto the edge of the hot tub, staring at him, hoping he will take the initiative.
She puts her hand slowly down her bikini to caress her wet pussy. Casey moves closer to her as she sticks her finger further into her pussy.
Before his bbs preteen link can touch her body, she pulls her soaked finger out, traces it on his bbs loli sunbbs, and slowly licks his bbc pictures lolitas clean.
He moves his head down her body, kissing her skin on his way. When he reaches her bikini,
he unties each side with his teeth and throws that piece in the hot tub as well. As he moves further down still, he kisses her stomach,
traveling down to her smooth pussy child sex slave industry. He starts by lightly kissing on the outside, all around, then penetrates her deep purple with his tongue.. slowly.
Moving in closer, he surrounds her clit with his dark russian lolita and sucks gently. With his free nymphet lolita around and his tongue circling her clit,
he slides a finger inside, fucking her faster and faster. He moves up and replaces his finger with his dick,
keeping up with the pace of her heartbeat felt through their chests.
They fuck so fast and hard that she is left with bruises and abrasions on her skin from the concrete that aren't found until the next morning.
"Damn, baby, I can't tell if I had a good time or if you kicked my ass. Maybe it was both," she said.

5:06 AM, February 27, 2007  
Anonymous Anonymous said...

I gathered a couple of pillows and put them under my head and chest and raised my butt up.
It didn't take us long to get into position and he was soon sliding himself into me very slowly.
He was right, his ukraine top child was touching some places it missed when we did it with him lying on top of me.
When he had himself buried he began long slow thrusts while pulling me back to him with a hand on each of my hips.
A few minutes of that and he let one hand go and reached around and gently massaged a nipple.
Between his young model driving deep inside of me and his fingers on my breast I knew I was going to explode quickly. "Don, I'm going to preteen model
"Honey, see if you can hold back a bit and maybe we can puss pedo at the same time.""I'll try."
I felt him stroking the shaft of his lolita while the head was in me and moving it in and out of me ever so slowly.
I could see what he was doing.
He was getting himself aroused with jacking himself off with only part of his preteen bbs in me so he could try and free teen porn at the same time as I would.
I could feel the heat rising in me and I threw my ass back at him and drove his preteen sample video all the way in as I felt my orgasm come over me. "Don I'm coming."

9:03 PM, February 27, 2007  
Anonymous Anonymous said...

cheap flightss

4:49 AM, March 05, 2007  
Anonymous Anonymous said...

The bar was gritty and dim. About what one would expect on a far-flung space outpost. Tonya ran a tired hand through her close-cropped hair, ruffling the green and pink stripes. Dispatch had finally managed to get her a load of crystal ore out the Andromeda Star System. She had been in port four farding days! A space hauler did not make money docked on a tiny planet in no-where land for days on end.
The only bright spot on this trip was the exotic stripper she found in this nasty bar. orgy lesbian hentai's show was next. Tonya's pulse quickened as the techno beat started to play and strobes colored the air. ranma hentai burst onto the stage, thin and graceful. Her fully toned muscles well displayed under her taut blue skin. Long, electric blue hair curled playfully around her pointed ears and fell over her shoulders. When she turned her long, fluffy, electric blue tail drifted around her like a silk scarf.
Tonya loved her copper eyes and her raspy catlike tongue. Thinking about the way that tongue felt when applied to her body was making her wet with anticipation. porno toons was a terrific lover, inventive and generous. The swing they had rigged from the ceiling of the sleeping room was definitely going to be a treasured memory.
hentai rape had told her earlier today that she had arranged a going-away party for her. Tonya had never had a lover throw her a party. Her sex life was usually just a string of one-night stands recorded in her personal journal. Being a long distance hauler did not allow for in-depth relationships. Tonya preferred it that way. Meeting new people, seeing new planets, the great pay, that was her goal.
Liema was gliding and sliding, about to finish her dance for the small crowd. The server came by and dropped a note on the table with Tonya's drink. "Meet me outside. I will drive." Signaling the server for her bill, she hastily paid her drink and went out to where free animations parked her flyer. Her blood hummed with excitement over the coming evening. Liema had been keeping plans for the party secret, teasing her with possibilities.
The dancer sauntered out the back door, her blue skin occasionally reflecting the lights of the parking lot. She greeted Tonya with a kiss; she opened the door of her mini flyer and let Tonya settle in. Liema drew a black, opaque scarf out of her body suit and turned towards Tonya.
"It is good that you are not scheduled to leave early in the next sun phase. I have a full night planned for you." Liema's eyes gleamed with mischief. "You promised you would trust me to make this a truly exhilarating experience, so I hope you don't mind the blind fold."
"No, I don't mind, I enjoy mystery." Tonya was slightly nervous. After all, she had only known Liema for a few sun phases. However, Liema was a Sieral Cat, a race known for its expressive sexuality and its inability to mistreat others. They had carefully bred the violent tendencies from their race 100's of years ago. As a people, they were highly prized as concubines, dancers, artists, and pricey escorts. They were also highly selective in their tastes. They were taught to thoroughly research an individual using interstellar databases before they would ever considering a sexual relationship.
This was Tonya's second encounter with a Sieral. She had transported and abducted male out of an illegal slave market three years previously and assisted the Interstellar Police Marines with information for a bust. She had been well rewarded for her efforts, but she had informed on the slave trafficking out of a deep sense of honor. Slavery was purely evil and something she had no tolerance for.
The flyer banked to the left and came in for a smooth landing on top of a small townhouse unit. The landscape of the planet was bleak, peppered by buildings in a haphazard style. Liema helped Tonya out of the flyer and guided her to the elevator access. The elevator quickly swept down to the lower level. As they exited the box, Tonya could smell spicy foods and sweet carnoli spice cooking close by.Hentai pics gallery

8:54 AM, March 09, 2007  
Anonymous Anonymous said...

In its North American auto show premiere, Ferrari unveils the stunning Los Angeles Auto Show 599 GTB Fiorano at the 2006 Los Angeles Auto Show.The Los Angeles Auto Show 599 GTB Fiorano completes a range entirely overhauled in a little over two years.
"During the development of the Los Angeles Auto Show 599 GTB Fiorano we dedicated a great deal of attention to the North American market and especially to California where Ferrari has a high concentration of passionate clients," said Amedeo Felisa, General Manager of Ferrari S.p.A. "The V12 mid-front engine Los Angeles Auto Show 599 GTB Fiorano represents the best of Ferrari's current production. It is the highest performance production series Ferrari ever.
At the same time it provides unmatched comfort and driving pleasure," continued Mr Felisa. 2006 has been a significant year for Ferrari in terms of company performance, continuing the positive trend of 2005.In the first half of 2006, the company recorded revenues of euro; 706 million, a 16.7% increase on the same period last year.
More view here :
Auto Show
AutoSport
Buy car
Car Dealers
Car classification
Car Finance
Car Law
car loan
Car New Models
Car Parts
Car Problems
Car Reviews
Concept Cars
Formula1
Great Drives
In Gear
New cars
Road Tests
Sport Car
Truck Car
Used Cars
Vehicles
Video Galleries

1:13 PM, March 12, 2007  
Anonymous Anonymous said...


































7:40 AM, March 13, 2007  
Anonymous Anonymous said...

Hi everyone!!

Is anyone aware of these products in terms of efficacy and legitamacy? - http://steroidssupplier.com
Excellent products!!

See you

11:04 PM, April 02, 2007  
Anonymous Anonymous said...

Last News in Electronic world in the net

6:58 AM, April 07, 2007  
Anonymous Anonymous said...

....................
..............................
. .............................
..
........

discount airfares cheap airline tickets

8:54 AM, April 09, 2007  
Anonymous Anonymous said...

....................
..............................
. .............................
..
........

alaska and airlines and schedules

8:54 AM, April 09, 2007  
Anonymous Anonymous said...

You have a very good blog that the main thing a lot of interesting and useful! erectile dysfunction

2:24 AM, January 10, 2012  
Anonymous Anonymous said...

Keep up the good work. general health Read a useful article about tramadol tramadol

2:38 AM, February 09, 2012  
Anonymous Anonymous said...

I'm sure the best for you [URL=http://e--store.com/]prada handbags outlet[/URL] to get new coupon OJOkdsGI [URL=http://e--store.com/ ] http://e--store.com/ [/URL]

7:29 PM, December 01, 2012  
Anonymous Anonymous said...

get eIthYZsk [URL=]burberry online store[/URL] to get new coupon yTDUnXdW [URL= ] [/URL]

1:29 PM, February 06, 2013  
Anonymous Anonymous said...

you will like KlcNyzWI [URL=]replica handbags[/URL] for less chIhlQKM [URL= ] [/URL]

1:32 PM, February 06, 2013  
Anonymous Anonymous said...

xanax online buy xanax online legally - xanax online to buy

12:21 PM, February 20, 2013  
Anonymous Anonymous said...

tramadol 50 mg buy tramadol online usa - tramadol overnight cod delivery

9:10 PM, February 22, 2013  
Anonymous Anonymous said...

xanax online xanax for getting high - buy xanax online 2mg

7:08 AM, February 23, 2013  
Anonymous Anonymous said...

buy carisoprodol carisoprodol 350 mg tab - carisoprodol 350 mg oral tablet

12:44 PM, February 23, 2013  
Anonymous Anonymous said...

xanax online white xanax bars 4mg - alprazolam 0.5 mg picture

9:02 PM, February 23, 2013  
Anonymous Anonymous said...

buy xanax online no prescription cheap buy xanax online ireland - xanax dosage for panic attack

3:55 AM, February 24, 2013  
Anonymous Anonymous said...

can i buy xanax online xanax dosage gad - xanax side effects libido

5:27 AM, February 24, 2013  
Anonymous Anonymous said...

buy carisoprodol carisoprodol positive drug test - carisoprodol y meloxicam

3:59 PM, February 24, 2013  
Anonymous Anonymous said...

discount xanax xanax bars 93 1003 - safe way to buy xanax online

7:45 PM, February 24, 2013  
Anonymous Anonymous said...

buy tramadol tramadol schedule - buy tramadol no prescription usa

9:59 PM, February 24, 2013  
Anonymous Anonymous said...

generic alprazolam buy xanax online with no prescription needed - xanax 2mg alprazolam

8:06 AM, February 25, 2013  
Anonymous Anonymous said...

tramadol generic can tramadol hcl 50 mg get you high - tramadol 50 mg can you get high

9:38 PM, February 25, 2013  
Anonymous Anonymous said...

xanax online xanax side effects in dogs - xanax side effects long term abuse

11:03 PM, February 25, 2013  
Anonymous Anonymous said...

cheap alprazolam xanax high how long - xanax for test anxiety

4:59 PM, February 26, 2013  
Anonymous Anonymous said...

carisoprodol 350 mg buy carisoprodol cheap - carisoprodol bluelight

9:59 AM, February 27, 2013  
Anonymous Anonymous said...

buy tramadol online buy tramadol in usa - tramadol hcl for migraines

10:42 AM, February 27, 2013  
Anonymous Anonymous said...

xanax online xanax side effects during pregnancy - 1 mg xanax high dose

6:17 AM, February 28, 2013  
Anonymous Anonymous said...

order cialis online canada buy cialis online fast shipping generic - cialis 10mg cost

9:58 AM, February 28, 2013  
Anonymous Anonymous said...

xanax no prescription online xanax dosage 3719 - xanax and alcohol

10:34 PM, February 28, 2013  
Anonymous Anonymous said...

buy cialis online cialis online overnight delivery - cheap cialis 20mg pills

2:47 AM, March 01, 2013  
Anonymous Anonymous said...

xanax online xanax effects gaba - xanax bars strength

4:28 PM, March 01, 2013  
Anonymous Anonymous said...

buy cialis online cialis online best price - cialis viagra best price

7:51 PM, March 01, 2013  
Anonymous Anonymous said...

buy xanax online legally generic xanax .5mg - xanax bars wholesale

9:25 AM, March 02, 2013  
Anonymous Anonymous said...

generic xanax 1mg klonopin compared 1mg xanax - xanax bars no prescription

4:09 AM, March 03, 2013  
Anonymous Anonymous said...

cialis online cialis online lloyds pharmacy - review of cialis daily

1:32 PM, March 03, 2013  
Anonymous Anonymous said...

xanax online xanax no prescription - xanax withdrawal how long

5:38 PM, March 03, 2013  
Anonymous Anonymous said...

http://landvoicelearning.com/#44827 buy tramadol american express - buy tramadol topix

3:39 AM, March 05, 2013  
Anonymous Anonymous said...

http://landvoicelearning.com/#51438 tramadol 50mg generic for ultram - tramadol legal to buy online

11:03 AM, March 05, 2013  
Anonymous Anonymous said...

buy tramadol rx tramadol overdose 50mg - tramadol with vicodin

2:50 AM, March 06, 2013  
Anonymous Anonymous said...

http://landvoicelearning.com/#51438 buy tramadol online new zealand - safe place buy tramadol online

7:52 PM, March 06, 2013  
Anonymous Anonymous said...

buy tramadol buy tramadol line usa - tramadol ultram narcotic

12:12 PM, March 07, 2013  
Anonymous Anonymous said...

buy tramadol online reviews tramadol 50mg for sale - buy tramadol online from usa

10:47 PM, March 07, 2013  
Anonymous Anonymous said...

buy tramadol online zydol tramadol dosage - tramadol hcl 50 mg can you get high

3:01 PM, March 08, 2013  
Anonymous Anonymous said...

buy tramadol tramadol 100mg/1ml - tramadol dosering

6:22 PM, March 08, 2013  
Anonymous Anonymous said...

1, reductil sale - meridia diet pills without prescription http://www.meridiaforyourdiet.net/#buy-meridia, [url=http://www.meridiaforyourdiet.net/#generic-meridia]generic meridia[/url]

9:44 PM, March 08, 2013  
Anonymous Anonymous said...

http://buytramadolonlinecool.com/#61458 buy tramadol online no prescription needed - 100mg of tramadol high

4:44 AM, March 09, 2013  
Anonymous Anonymous said...

buy tramadol buy tramadol online with mastercard - tramadol addiction buprenorphine

9:41 AM, March 09, 2013  
Anonymous Anonymous said...

http://blog.dawn.com/dblog/buy/#91875 tramadol for dogs no prescription - tramadol y paracetamol

3:19 PM, March 09, 2013  
Anonymous Anonymous said...

buy tramadol online buy generic tramadol - tramadol used withdrawal

6:54 PM, March 10, 2013  
Anonymous Anonymous said...

http://buytramadolonlinecool.com/#56411 tramadol over the counter - tramadol for dogs same for humans

8:50 AM, March 11, 2013  
Anonymous Anonymous said...

buy tramadol rimadyl vs tramadol for dogs - buy tramadol online by cod

11:25 AM, March 11, 2013  
Anonymous Anonymous said...

http://blog.dawn.com/dblog/buy/#91875 buy tramadol online usa pharmacy - tramadol 200mg

6:23 PM, March 11, 2013  
Anonymous Anonymous said...

buy valium online no prescription generic valium pill identification - valium effects next day

4:43 AM, March 12, 2013  
Anonymous Anonymous said...

buy lorazepam ativan dosage valium - buy lorazepam bulk

10:44 AM, March 12, 2013  
Anonymous Anonymous said...

buy ativan online ativan and drinking alcohol - ativan side effects/ringing in the ears

3:28 PM, March 13, 2013  
Anonymous Anonymous said...

http://reidmoody.com/#49853 lorazepam 1mg dosage - ativan generic cost

10:57 PM, March 13, 2013  
Anonymous Anonymous said...

buy ativan online ativan dosage cats - ativan withdrawal fatigue

2:28 PM, March 14, 2013  
Anonymous Anonymous said...

ways to buy ativan online strength of ativan vs xanax - ativan given intravenously

7:36 AM, March 15, 2013  
Anonymous Anonymous said...

http://staam.org/#92453 buy cheap tramadol online cod - tramadol 50mg ratiopharm

3:46 AM, March 16, 2013  
Anonymous Anonymous said...

http://staam.org/#74560 ultram vs tramadol generic - tramadol ultram hcl

4:44 PM, March 16, 2013  
Anonymous Anonymous said...

buy xanax online 5 panel drug screen xanax - xanax for anxiety daily

10:07 PM, March 16, 2013  
Anonymous Anonymous said...

http://staam.org/#56274 tramadol withdrawal back pain - tramadol withdrawal plan

1:27 PM, March 17, 2013  
Anonymous Anonymous said...

buy tramadol online tramadol urinary retention - tramadol hcl 50mg narcotic

5:29 PM, March 18, 2013  
Anonymous Anonymous said...

http://staam.org/#21236 buy tramadol online without prescriptions - high from tramadol hcl

1:27 AM, March 19, 2013  
Anonymous Anonymous said...

http://www.markbattypublisher.com/jsp/buytramadol/#6028 buy tramadol lowest price - buy tramadol online reviews

9:33 AM, March 19, 2013  
Anonymous Anonymous said...

buy tramadol online order tramadol online international - buy tramadol 50 mg online

5:38 PM, March 19, 2013  
Anonymous Anonymous said...

buy xanax online white round generic xanax - where to buy xanax in australia

6:19 PM, March 19, 2013  
Anonymous Anonymous said...

xanax online prescription buy xanax online in the uk - xanax pills pictures

3:16 PM, March 20, 2013  
Anonymous Anonymous said...

xanax 0.5mg what will 1mg of xanax do to you - xanax dosage tinnitus

10:13 PM, March 20, 2013  
Anonymous Anonymous said...

buy xanax online is there a generic xanax xr - many 2mg xanax overdose

4:17 PM, March 22, 2013  
Anonymous Anonymous said...

xanax online prescription xanax generic dosage - xanax sleeping pill side effects

9:12 PM, March 24, 2013  
Anonymous Anonymous said...

http://bayshorechryslerjeep.com/#2mg pictures generic 2mg xanax - will 1mg of xanax do anything

11:26 AM, March 25, 2013  
Anonymous Anonymous said...

buy xanax online xanax generic price - where to buy xanax without rx

1:25 AM, March 26, 2013  
Anonymous Anonymous said...

buy tramadol cheap no prescription buy tramadol online no prescription - cheap tramadol no prescription

3:24 PM, April 25, 2013  
Anonymous Anonymous said...

buy ambien with prescription buy ambien 10mg online - buy ambien in uk

7:52 PM, May 30, 2013  
Anonymous Anonymous said...

как прекратить играть в казино or онлайн казино betfair or казино онлайн маленькими ставками or казино онлайн рулетка отзывы or американская рулетка онлайн бесплатно or как играть в рулетку ла2

8:42 PM, May 31, 2013  

Post a Comment

<< Home