Microsoft gets into the blogging world with MSN Spaces The in-laws gave us the nicest present ever…
Dec 06

Injecting Dependencies: My Test Classes Want Injection Too

Tech Add comments

I like injecting dependencies. It makes my code a lot cleaner and easier to deal with.

So, when I find a service locator lookup method such as a Spring getBean("foo), my nose turns up a little.

On a current project, I see these getBean() calls in various JUnit tests. The Spring Beans themselves often have a public field called springBeanName, which the test goes too, to look up the right bean.

Initial Code

This meant that the code looked like this:

A Base Test Case class has within it:

  • Code to configure logging
  • Code to setup Spring:
    String[] paths = {"classpath:applicationContext*.xml"};
    ctx = new XmlWebApplicationContext();
    ctx.setConfigLocations(paths);
    ctx.setServletContext(new MockServletContext(""));
    ctx.refresh();
    
  • Some mock objects which various test classes can grab
  • Helper methods to get Spring managed beans. E.g. a DAO:
    protected UserDAO getUserDao() {
    return (UserDAO) getBean(UserDAO.springBeanName);
    }
    

Then a test itself will extend the base class, and either grab a bean from a helper method, or do a getBean() themselves.

Injecting into JUnit classes

I want to be able to put my set/get injection methods on my test classes, and have Spring do the rest.

Luckily, Colin and Dmitriy pointed me to org.springframework.test.AbstractDependencyInjectionSpringContextTests, which likes to hang out in the Spring Mocks package (not core Spring).

It simply allows you to bootstrap your test class, and have Spring wire you up nicely. I changed my BaseTestCase to now implement this abstract class, and overrite the method which returns the config locations. Something like:

protected String[] getConfigLocations() {
return new String[] { "classpath:applicationContext*.xml" };
}

Now, in my test cases I setup a get/set combo for the types that I wish to inject. For example:

public class AddSiteTest extends BaseTestCase {

public void testAddingValidSite() throws Exception {
TestCase.assertEquals("AddSiteTest action did not return SUCCESS", Action.SUCCESS, getAction().execute());
}

// ------------------------------------------------------------------------
//  Spring Dependencies: BaseTestCase will autowire by type
// ------------------------------------------------------------------------
private AddSite action;

public AddSite getAction() {
return action;
}

public void setAction(AddSite action) {
this.action = action;
}

}

What I really want: No auto-wire, let me wire it

This has got me pretty much what I wanted. My test classes not have dependencies injected. However, I kinda want one more step.

Rather than wiring up automatically by type, I would rather:

  • Create a test-applicationContext.xml which has the wiring of test classes: E.g.
    <bean id="addSiteTest" class="foo.web.actions.AddSiteTest">
    <property name="action"><ref bean="addSiteAction"/></property>
    </bean>
    
  • Create one get/setAction in the BaseTestCase:
    private Action action;
    
    public Action getAction() {
    return action;
    }
    
    public void setAction(Action action) {
    this.action = action;
    }
    

With this configuration all of my tests could delve and grab the action via getAction() without having to do anything else. For this to work, I am basically asking Spring for an API like:

injectDependencies(Object toInject, Spring beanIdWithWhichToGetDependenciesFrom, …);

E.g.

injectDependencies(this, getMyBeanId(), …);

Then in the given class you could override getMyBeanId(), or you could default to “my class name with the first letter lower-cased” for ease of use :)

NOTE: You can auto-wire by name:

Declare protected variables of the required type which match named beans in the context. This is autowire by name, rather than type. This approach is based on an approach originated by Ara Abrahmian. Setter Dependency Injection is the default: set the populateProtectedVariables property to true in the constructor to switch on Field Injection.

Anyway, I am just glad to have Spring watching my back on the testing side too…

9 Responses to “Injecting Dependencies: My Test Classes Want Injection Too”

  1. Ara Abrahamian Says:

    Dion, I like my approach more :) With my approach (http://jroller.com/page/ara_e/20040717#dependency_injection_for_unit_tests) there’s no need for defining the test class as a bean. If you want to TDD then writing less config/code beforehand is a good idea.

    Ara.

  2. Confluence: Gonzo Says:

    Dependency Injection for Unit Tests

    A couple of interesting blogs on unit tests and dependency injection : Injecting Dependencies: My Test Classes Want Injection Too

  3. Alfred Says:

    Just surfed in and found this really interesting place here.
    A lot of good stuff for everybody. Go on like this and i will
    surely visit your site again sometime.

  4. mildnet.com Says:

    http://www.mildnet.com – Internet marketing,search engine optimization (SEO) services,web design

  5. prlink.org Says:

    http://www.prlink.org

  6. Alex Says:

    On a current project, I see these getBean() calls in various JUnit tests.

  7. Alex Says:

    I want to be able to put my set/get injection methods on my test classes, and have Spring do the rest.

    Luckily, Colin and Dmitriy pointed me to

  8. Alex Says:

    http://www.rosdon.ru

  9. cdcd Says:

    http://hitech.prophp.org/link1.html
    http://hitech.prophp.org/link2.html
    http://hitech.prophp.org/link3.html
    http://hitech.prophp.org/link4.html
    http://hitech.prophp.org/link5.html
    http://hitech.prophp.org/link6.html
    http://hitech.prophp.org/link7.html
    http://hitech.prophp.org/link8.html
    http://hitech.prophp.org/link9.html
    http://hitech.prophp.org/link10.html
    http://hitech.prophp.org/link11.html
    http://hitech.prophp.org/link12.html
    http://hitech.prophp.org/link13.html
    http://hitech.prophp.org/link14.html
    http://hitech.prophp.org/link15.html
    http://hitech.prophp.org/link16.html
    http://hitech.prophp.org/link17.html
    http://hitech.prophp.org/link18.html
    http://hitech.prophp.org/link19.html
    http://hitech.prophp.org/link20.html
    http://hitech.prophp.org/link21.html
    http://hitech.prophp.org/link22.html
    http://hitech.prophp.org/link23.html
    http://hitech.prophp.org/link24.html
    http://hitech.prophp.org/link25.html
    http://hitech.prophp.org/link26.html
    http://hitech.prophp.org/link27.html
    http://hitech.prophp.org/link28.html
    http://hitech.prophp.org/link29.html
    http://hitech.prophp.org/link30.html
    http://hitech.prophp.org/link31.html
    http://hitech.prophp.org/link32.html
    http://hitech.prophp.org/link33.html
    http://hitech.prophp.org/link34.html
    http://hitech.prophp.org/link35.html
    http://hitech.prophp.org/link36.html
    http://hitech.prophp.org/link37.html
    http://hitech.prophp.org/link38.html
    http://hitech.prophp.org/link39.html
    http://hitech.prophp.org/link40.html
    http://hitech.prophp.org/link41.html
    http://hitech.prophp.org/link42.html
    http://hitech.prophp.org/link43.html
    http://hitech.prophp.org/link44.html
    http://hitech.prophp.org/link45.html
    http://hitech.prophp.org/link46.html
    http://hitech.prophp.org/link47.html
    http://hitech.prophp.org/link48.html
    http://hitech.prophp.org/link49.html
    http://hitech.prophp.org/link50.html
    http://hitech.prophp.org/link51.html
    http://hitech.prophp.org/link52.html
    http://hitech.prophp.org/link53.html
    http://hitech.prophp.org/link54.html
    http://hitech.prophp.org/link55.html
    http://hitech.prophp.org/link56.html
    http://hitech.prophp.org/link57.html
    http://hitech.prophp.org/link58.html
    http://hitech.prophp.org/link59.html
    http://hitech.prophp.org/link60.html
    http://hitech.prophp.org/link61.html
    http://hitech.prophp.org/link62.html
    http://hitech.prophp.org/link63.html
    http://hitech.prophp.org/link64.html
    http://hitech.prophp.org/link65.html
    http://hitech.prophp.org/link66.html
    http://hitech.prophp.org/link67.html
    http://hitech.prophp.org/link68.html
    http://hitech.prophp.org/link69.html
    http://hitech.prophp.org/link70.html
    http://hitech.prophp.org/link71.html
    http://hitech.prophp.org/link72.html
    http://hitech.prophp.org/link73.html
    http://hitech.prophp.org/link74.html
    http://hitech.prophp.org/link75.html
    http://hitech.prophp.org/link76.html
    http://hitech.prophp.org/link77.html
    http://hitech.prophp.org/link78.html
    http://hitech.prophp.org/link79.html
    http://hitech.prophp.org/link80.html
    http://hitech.prophp.org/link81.html
    http://hitech.prophp.org/link82.html
    http://hitech.prophp.org/link83.html
    http://hitech.prophp.org/link84.html
    http://hitech.prophp.org/link85.html
    http://hitech.prophp.org/link86.html
    http://hitech.prophp.org/link87.html
    http://hitech.prophp.org/link88.html
    http://hitech.prophp.org/link89.html
    http://hitech.prophp.org/link90.html
    http://hitech.prophp.org/link91.html
    http://hitech.prophp.org/link92.html
    http://hitech.prophp.org/link93.html
    http://hitech.prophp.org/link94.html
    http://hitech.prophp.org/link95.html
    http://hitech.prophp.org/link96.html
    http://hitech.prophp.org/link97.html
    http://hitech.prophp.org/link98.html
    http://hitech.prophp.org/link99.html
    http://hitech.prophp.org/link100.html
    http://hitech.prophp.org/link101.html
    http://hitech.prophp.org/link102.html
    http://hitech.prophp.org/link103.html
    http://hitech.prophp.org/link104.html
    http://hitech.prophp.org/link105.html
    http://hitech.prophp.org/link106.html
    http://hitech.prophp.org/link107.html
    http://hitech.prophp.org/link108.html
    http://hitech.prophp.org/link109.html
    http://hitech.prophp.org/link110.html
    http://hitech.prophp.org/link111.html
    http://hitech.prophp.org/link112.html
    http://hitech.prophp.org/link113.html
    http://hitech.prophp.org/link114.html
    http://hitech.prophp.org/link115.html
    http://hitech.prophp.org/link116.html
    http://hitech.prophp.org/link117.html
    http://hitech.prophp.org/link118.html
    http://hitech.prophp.org/link119.html
    http://hitech.prophp.org/link120.html
    http://hitech.prophp.org/link121.html
    http://hitech.prophp.org/link122.html
    http://hitech.prophp.org/link123.html
    http://hitech.prophp.org/link124.html
    http://hitech.prophp.org/link125.html
    http://hitech.prophp.org/link126.html
    http://hitech.prophp.org/link127.html
    http://hitech.prophp.org/link128.html
    http://hitech.prophp.org/link129.html
    http://hitech.prophp.org/link130.html
    http://hitech.prophp.org/link131.html
    http://hitech.prophp.org/link132.html
    http://hitech.prophp.org/link133.html
    http://hitech.prophp.org/link134.html
    http://hitech.prophp.org/link135.html
    http://hitech.prophp.org/link136.html
    http://hitech.prophp.org/link137.html
    http://hitech.prophp.org/link138.html
    http://hitech.prophp.org/link139.html
    http://hitech.prophp.org/link140.html
    http://hitech.prophp.org/link141.html
    http://hitech.prophp.org/link142.html
    http://hitech.prophp.org/link143.html
    http://hitech.prophp.org/link144.html
    http://hitech.prophp.org/link145.html
    http://hitech.prophp.org/link146.html
    http://hitech.prophp.org/link147.html
    http://hitech.prophp.org/link148.html
    http://hitech.prophp.org/link149.html
    http://hitech.prophp.org/link150.html
    http://hitech.prophp.org/link151.html
    http://hitech.prophp.org/link152.html
    http://hitech.prophp.org/link153.html
    http://hitech.prophp.org/link154.html
    http://hitech.prophp.org/link155.html
    http://hitech.prophp.org/link156.html
    http://hitech.prophp.org/link157.html
    http://hitech.prophp.org/link158.html
    http://hitech.prophp.org/link159.html
    http://hitech.prophp.org/link160.html
    http://hitech.prophp.org/link161.html
    http://hitech.prophp.org/link162.html
    http://hitech.prophp.org/link163.html
    http://hitech.prophp.org/link164.html
    http://hitech.prophp.org/link165.html
    http://hitech.prophp.org/link166.html
    http://hitech.prophp.org/link167.html
    http://hitech.prophp.org/link168.html
    http://hitech.prophp.org/link169.html
    http://hitech.prophp.org/link170.html
    http://hitech.prophp.org/link171.html
    http://hitech.prophp.org/link172.html
    http://hitech.prophp.org/link173.html
    http://hitech.prophp.org/link174.html
    http://hitech.prophp.org/link175.html
    http://hitech.prophp.org/link176.html
    http://hitech.prophp.org/link177.html
    http://hitech.prophp.org/link178.html
    http://hitech.prophp.org/link179.html
    http://hitech.prophp.org/link180.html
    http://hitech.prophp.org/link181.html
    http://hitech.prophp.org/link182.html
    http://hitech.prophp.org/link183.html
    http://hitech.prophp.org/link184.html
    http://hitech.prophp.org/link185.html
    http://hitech.prophp.org/link186.html
    http://hitech.prophp.org/link187.html
    http://hitech.prophp.org/link188.html
    http://hitech.prophp.org/link189.html
    http://hitech.prophp.org/link190.html
    http://hitech.prophp.org/link191.html
    http://hitech.prophp.org/link192.html
    http://hitech.prophp.org/link193.html
    http://hitech.prophp.org/link194.html
    http://hitech.prophp.org/link195.html
    http://hitech.prophp.org/link196.html
    http://hitech.prophp.org/link197.html
    http://hitech.prophp.org/link198.html
    http://hitech.prophp.org/link199.html
    http://hitech.prophp.org/link200.html
    http://hitech.prophp.org/link201.html
    http://hitech.prophp.org/link202.html
    http://hitech.prophp.org/link203.html
    http://hitech.prophp.org/link204.html
    http://hitech.prophp.org/link205.html
    http://hitech.prophp.org/link206.html
    http://hitech.prophp.org/link207.html
    http://hitech.prophp.org/link208.html
    http://hitech.prophp.org/link209.html
    http://hitech.prophp.org/link210.html
    http://hitech.prophp.org/link211.html
    http://hitech.prophp.org/link212.html
    http://hitech.prophp.org/link213.html
    http://hitech.prophp.org/link214.html
    http://hitech.prophp.org/link215.html
    http://hitech.prophp.org/link216.html
    http://hitech.prophp.org/link217.html
    http://hitech.prophp.org/link218.html
    http://hitech.prophp.org/link219.html
    http://hitech.prophp.org/link220.html
    http://hitech.prophp.org/link221.html
    http://hitech.prophp.org/link222.html
    http://hitech.prophp.org/link223.html
    http://hitech.prophp.org/link224.html
    http://hitech.prophp.org/link225.html
    http://hitech.prophp.org/link226.html
    http://hitech.prophp.org/link227.html
    http://hitech.prophp.org/link228.html
    http://hitech.prophp.org/link229.html
    http://hitech.prophp.org/link230.html
    http://hitech.prophp.org/link231.html
    http://hitech.prophp.org/link232.html
    http://hitech.prophp.org/link233.html
    http://hitech.prophp.org/link234.html
    http://hitech.prophp.org/link235.html
    http://hitech.prophp.org/link236.html
    http://hitech.prophp.org/link237.html
    http://hitech.prophp.org/link238.html
    http://hitech.prophp.org/link239.html
    http://hitech.prophp.org/link240.html
    http://hitech.prophp.org/link241.html
    http://hitech.prophp.org/link242.html
    http://hitech.prophp.org/link243.html
    http://hitech.prophp.org/link244.html
    http://hitech.prophp.org/link245.html
    http://hitech.prophp.org/link246.html
    http://hitech.prophp.org/link247.html
    http://hitech.prophp.org/link248.html
    http://hitech.prophp.org/link249.html
    http://hitech.prophp.org/link250.html
    http://hitech.prophp.org/link251.html
    http://hitech.prophp.org/link252.html
    http://hitech.prophp.org/link253.html
    http://hitech.prophp.org/link254.html
    http://hitech.prophp.org/link255.html
    http://hitech.prophp.org/link256.html
    http://hitech.prophp.org/link257.html
    http://hitech.prophp.org/link258.html
    http://hitech.prophp.org/link259.html
    http://hitech.prophp.org/link260.html
    http://hitech.prophp.org/link261.html
    http://hitech.prophp.org/link262.html
    http://hitech.prophp.org/link263.html
    http://hitech.prophp.org/link264.html
    http://hitech.prophp.org/link265.html
    http://hitech.prophp.org/link266.html
    http://hitech.prophp.org/link267.html
    http://hitech.prophp.org/link268.html
    http://hitech.prophp.org/link269.html
    http://hitech.prophp.org/link270.html
    http://hitech.prophp.org/link271.html
    http://hitech.prophp.org/link272.html
    http://hitech.prophp.org/link273.html
    http://hitech.prophp.org/link274.html
    http://hitech.prophp.org/link275.html
    http://hitech.prophp.org/link276.html
    http://hitech.prophp.org/link277.html
    http://hitech.prophp.org/link278.html
    http://hitech.prophp.org/link279.html
    http://hitech.prophp.org/link280.html
    http://hitech.prophp.org/link281.html
    http://hitech.prophp.org/link282.html
    http://hitech.prophp.org/link283.html
    http://hitech.prophp.org/link284.html
    http://hitech.prophp.org/link285.html
    http://hitech.prophp.org/link286.html
    http://hitech.prophp.org/link287.html
    http://hitech.prophp.org/link288.html
    http://hitech.prophp.org/link289.html
    http://hitech.prophp.org/link290.html
    http://hitech.prophp.org/link291.html
    http://hitech.prophp.org/link292.html
    http://hitech.prophp.org/link293.html
    http://hitech.prophp.org/link294.html
    http://hitech.prophp.org/link295.html
    http://hitech.prophp.org/link296.html
    http://hitech.prophp.org/link297.html
    http://hitech.prophp.org/link298.html
    http://hitech.prophp.org/link299.html
    http://hitech.prophp.org/link300.html
    http://hitech.prophp.org/link301.html
    http://hitech.prophp.org/link302.html
    http://hitech.prophp.org/link303.html
    http://hitech.prophp.org/link304.html
    http://hitech.prophp.org/link305.html
    http://hitech.prophp.org/link306.html
    http://hitech.prophp.org/link307.html
    http://hitech.prophp.org/link308.html
    http://hitech.prophp.org/link309.html
    http://hitech.prophp.org/link310.html
    http://hitech.prophp.org/link311.html
    http://hitech.prophp.org/link312.html
    http://hitech.prophp.org/link313.html
    http://hitech.prophp.org/link314.html
    http://hitech.prophp.org/link315.html
    http://hitech.prophp.org/link316.html
    http://hitech.prophp.org/link317.html
    http://hitech.prophp.org/link318.html
    http://hitech.prophp.org/link319.html
    http://hitech.prophp.org/link320.html
    http://hitech.prophp.org/link321.html
    http://hitech.prophp.org/link322.html
    http://hitech.prophp.org/link323.html
    http://hitech.prophp.org/link324.html
    http://hitech.prophp.org/link325.html
    http://hitech.prophp.org/link326.html
    http://hitech.prophp.org/link327.html
    http://hitech.prophp.org/link328.html
    http://hitech.prophp.org/link329.html
    http://hitech.prophp.org/link330.html
    http://hitech.prophp.org/link331.html
    http://hitech.prophp.org/link332.html
    http://hitech.prophp.org/link333.html
    http://hitech.prophp.org/link334.html
    http://hitech.prophp.org/link335.html
    http://hitech.prophp.org/link336.html
    http://hitech.prophp.org/link337.html
    http://hitech.prophp.org/link338.html
    http://hitech.prophp.org/link339.html
    http://hitech.prophp.org/link340.html
    http://hitech.prophp.org/link341.html
    http://hitech.prophp.org/link342.html
    http://hitech.prophp.org/link343.html
    http://hitech.prophp.org/link344.html
    http://hitech.prophp.org/link345.html
    http://hitech.prophp.org/link346.html
    http://hitech.prophp.org/link347.html
    http://hitech.prophp.org/link348.html
    http://hitech.prophp.org/link349.html
    http://hitech.prophp.org/link350.html
    http://hitech.prophp.org/link351.html
    http://hitech.prophp.org/link352.html
    http://hitech.prophp.org/link353.html
    http://hitech.prophp.org/link354.html
    http://hitech.prophp.org/link355.html
    http://hitech.prophp.org/link356.html
    http://hitech.prophp.org/link357.html
    http://hitech.prophp.org/link358.html
    http://hitech.prophp.org/link359.html
    http://hitech.prophp.org/link360.html
    http://hitech.prophp.org/link361.html
    http://hitech.prophp.org/link362.html
    http://hitech.prophp.org/link363.html
    http://hitech.prophp.org/link364.html
    http://hitech.prophp.org/link365.html
    http://hitech.prophp.org/link366.html
    http://hitech.prophp.org/link367.html
    http://hitech.prophp.org/link368.html
    http://hitech.prophp.org/link369.html
    http://hitech.prophp.org/link370.html
    http://hitech.prophp.org/link371.html
    http://hitech.prophp.org/link372.html
    http://hitech.prophp.org/link373.html
    http://hitech.prophp.org/link374.html
    http://hitech.prophp.org/link375.html
    http://hitech.prophp.org/link376.html
    http://hitech.prophp.org/link377.html
    http://hitech.prophp.org/link378.html
    http://hitech.prophp.org/link379.html
    http://hitech.prophp.org/link380.html
    http://hitech.prophp.org/link381.html
    http://hitech.prophp.org/link382.html
    http://hitech.prophp.org/link383.html
    http://hitech.prophp.org/link384.html
    http://hitech.prophp.org/link385.html
    http://hitech.prophp.org/link386.html
    http://hitech.prophp.org/link387.html
    http://hitech.prophp.org/link388.html
    http://hitech.prophp.org/link389.html
    http://hitech.prophp.org/link390.html
    http://hitech.prophp.org/link391.html
    http://hitech.prophp.org/link392.html
    http://hitech.prophp.org/link393.html
    http://hitech.prophp.org/link394.html
    http://hitech.prophp.org/link395.html
    http://hitech.prophp.org/link396.html
    http://hitech.prophp.org/link397.html
    http://hitech.prophp.org/link398.html
    http://hitech.prophp.org/link399.html
    http://hitech.prophp.org/link400.html
    http://hitech.prophp.org/link401.html
    http://hitech.prophp.org/link402.html
    http://hitech.prophp.org/link403.html
    http://hitech.prophp.org/link404.html
    http://hitech.prophp.org/link405.html
    http://hitech.prophp.org/link406.html
    http://hitech.prophp.org/link407.html
    http://hitech.prophp.org/link408.html
    http://hitech.prophp.org/link409.html
    http://hitech.prophp.org/link410.html
    http://hitech.prophp.org/link411.html
    http://hitech.prophp.org/link412.html
    http://hitech.prophp.org/link413.html
    http://hitech.prophp.org/link414.html
    http://hitech.prophp.org/link415.html
    http://hitech.prophp.org/link416.html
    http://hitech.prophp.org/link417.html
    http://hitech.prophp.org/link418.html
    http://hitech.prophp.org/link419.html
    http://hitech.prophp.org/link420.html
    http://hitech.prophp.org/link421.html
    http://hitech.prophp.org/link422.html
    http://hitech.prophp.org/link423.html
    http://hitech.prophp.org/link424.html
    http://hitech.prophp.org/link425.html
    http://hitech.prophp.org/link426.html
    http://hitech.prophp.org/link427.html
    http://hitech.prophp.org/link428.html
    http://hitech.prophp.org/link429.html
    http://hitech.prophp.org/link430.html
    http://hitech.prophp.org/link431.html
    http://hitech.prophp.org/link432.html
    http://hitech.prophp.org/link433.html
    http://hitech.prophp.org/link434.html
    http://hitech.prophp.org/link435.html
    http://hitech.prophp.org/link436.html
    http://hitech.prophp.org/link437.html
    http://hitech.prophp.org/link438.html
    http://hitech.prophp.org/link439.html
    http://hitech.prophp.org/link440.html
    http://hitech.prophp.org/link441.html
    http://hitech.prophp.org/link442.html
    http://hitech.prophp.org/link443.html
    http://hitech.prophp.org/link444.html
    http://hitech.prophp.org/link445.html
    http://hitech.prophp.org/link446.html
    http://hitech.prophp.org/link447.html
    http://hitech.prophp.org/link448.html
    http://hitech.prophp.org/link449.html
    http://hitech.prophp.org/link450.html
    http://hitech.prophp.org/link451.html
    http://hitech.prophp.org/link452.html
    http://hitech.prophp.org/link453.html
    http://hitech.prophp.org/link454.html
    http://hitech.prophp.org/link455.html
    http://hitech.prophp.org/link456.html
    http://hitech.prophp.org/link457.html
    http://hitech.prophp.org/link458.html
    http://hitech.prophp.org/link459.html
    http://hitech.prophp.org/link460.html
    http://hitech.prophp.org/link461.html
    http://hitech.prophp.org/link462.html
    http://hitech.prophp.org/link463.html
    http://hitech.prophp.org/link464.html
    http://hitech.prophp.org/link465.html
    http://hitech.prophp.org/link466.html
    http://hitech.prophp.org/link467.html
    http://hitech.prophp.org/link468.html
    http://hitech.prophp.org/link469.html
    http://hitech.prophp.org/link470.html
    http://hitech.prophp.org/link471.html
    http://hitech.prophp.org/link472.html
    http://hitech.prophp.org/link473.html
    http://hitech.prophp.org/link474.html
    http://hitech.prophp.org/link475.html
    http://hitech.prophp.org/link476.html
    http://hitech.prophp.org/link477.html
    http://hitech.prophp.org/link478.html
    http://hitech.prophp.org/link479.html
    http://hitech.prophp.org/link480.html
    http://hitech.prophp.org/link481.html
    http://hitech.prophp.org/link482.html
    http://hitech.prophp.org/link483.html
    http://hitech.prophp.org/link484.html
    http://hitech.prophp.org/link485.html
    http://hitech.prophp.org/link486.html
    http://hitech.prophp.org/link487.html
    http://hitech.prophp.org/link488.html
    http://hitech.prophp.org/link489.html
    http://hitech.prophp.org/link490.html
    http://hitech.prophp.org/link491.html
    http://hitech.prophp.org/link492.html
    http://hitech.prophp.org/link493.html
    http://hitech.prophp.org/link494.html
    http://hitech.prophp.org/link495.html
    http://hitech.prophp.org/link496.html
    http://hitech.prophp.org/link497.html
    http://hitech.prophp.org/link498.html
    http://hitech.prophp.org/link499.html
    http://hitech.prophp.org/link500.html
    http://hitech.prophp.org/link501.html
    http://hitech.prophp.org/link502.html
    http://hitech.prophp.org/link503.html
    http://hitech.prophp.org/link504.html
    http://hitech.prophp.org/link505.html
    http://hitech.prophp.org/link506.html
    http://hitech.prophp.org/link507.html
    http://hitech.prophp.org/link508.html
    http://hitech.prophp.org/link509.html
    http://hitech.prophp.org/link510.html
    http://hitech.prophp.org/link511.html
    http://hitech.prophp.org/link512.html
    http://hitech.prophp.org/link513.html
    http://hitech.prophp.org/link514.html
    http://hitech.prophp.org/link515.html
    http://hitech.prophp.org/link516.html
    http://hitech.prophp.org/link517.html
    http://hitech.prophp.org/link518.html
    http://hitech.prophp.org/link519.html
    http://hitech.prophp.org/link520.html
    http://hitech.prophp.org/link521.html
    http://hitech.prophp.org/link522.html
    http://hitech.prophp.org/link523.html
    http://hitech.prophp.org/link524.html
    http://hitech.prophp.org/link525.html
    http://hitech.prophp.org/link526.html
    http://hitech.prophp.org/link527.html
    http://hitech.prophp.org/link528.html
    http://hitech.prophp.org/link529.html
    http://hitech.prophp.org/link530.html
    http://hitech.prophp.org/link531.html
    http://hitech.prophp.org/link532.html
    http://hitech.prophp.org/link533.html
    http://hitech.prophp.org/link534.html
    http://hitech.prophp.org/link535.html
    http://hitech.prophp.org/link536.html
    http://hitech.prophp.org/link537.html
    http://hitech.prophp.org/link538.html
    http://hitech.prophp.org/link539.html
    http://hitech.prophp.org/link540.html
    http://hitech.prophp.org/link541.html
    http://hitech.prophp.org/link542.html
    http://hitech.prophp.org/link543.html
    http://hitech.prophp.org/link544.html
    http://hitech.prophp.org/link545.html
    http://hitech.prophp.org/link546.html
    http://hitech.prophp.org/link547.html
    http://hitech.prophp.org/link548.html
    http://hitech.prophp.org/link549.html
    http://hitech.prophp.org/link550.html
    http://hitech.prophp.org/link551.html
    http://hitech.prophp.org/link552.html
    http://hitech.prophp.org/link553.html
    http://hitech.prophp.org/link554.html
    http://hitech.prophp.org/link555.html
    http://hitech.prophp.org/link556.html
    http://hitech.prophp.org/link557.html
    http://hitech.prophp.org/link558.html
    http://hitech.prophp.org/link559.html
    http://hitech.prophp.org/link560.html
    http://hitech.prophp.org/link561.html
    http://hitech.prophp.org/link562.html
    http://hitech.prophp.org/link563.html
    http://hitech.prophp.org/link564.html
    http://hitech.prophp.org/link565.html
    http://hitech.prophp.org/link566.html
    http://hitech.prophp.org/link567.html
    http://hitech.prophp.org/link568.html
    http://hitech.prophp.org/link569.html
    http://hitech.prophp.org/link570.html
    http://hitech.prophp.org/link571.html
    http://hitech.prophp.org/link572.html
    http://hitech.prophp.org/link573.html
    http://hitech.prophp.org/link574.html
    http://hitech.prophp.org/link575.html
    http://hitech.prophp.org/link576.html
    http://hitech.prophp.org/link577.html
    http://hitech.prophp.org/link578.html
    http://hitech.prophp.org/link579.html
    http://hitech.prophp.org/link580.html
    http://hitech.prophp.org/link581.html
    http://hitech.prophp.org/link582.html
    http://hitech.prophp.org/link583.html
    http://hitech.prophp.org/link584.html
    http://hitech.prophp.org/link585.html
    http://hitech.prophp.org/link586.html
    http://hitech.prophp.org/link587.html
    http://hitech.prophp.org/link588.html
    http://hitech.prophp.org/link589.html
    http://hitech.prophp.org/link590.html
    http://hitech.prophp.org/link591.html
    http://hitech.prophp.org/link592.html
    http://hitech.prophp.org/link593.html
    http://hitech.prophp.org/link594.html
    http://hitech.prophp.org/link595.html
    http://hitech.prophp.org/link596.html
    http://hitech.prophp.org/link597.html
    http://hitech.prophp.org/link598.html
    http://hitech.prophp.org/link599.html
    http://hitech.prophp.org/link600.html
    http://hitech.prophp.org/link601.html
    http://hitech.prophp.org/link602.html
    http://hitech.prophp.org/link603.html
    http://hitech.prophp.org/link604.html
    http://hitech.prophp.org/link605.html
    http://hitech.prophp.org/link606.html
    http://hitech.prophp.org/link607.html
    http://hitech.prophp.org/link608.html
    http://hitech.prophp.org/link609.html
    http://hitech.prophp.org/link610.html
    http://hitech.prophp.org/link611.html
    http://hitech.prophp.org/link612.html
    http://hitech.prophp.org/link613.html
    http://hitech.prophp.org/link614.html
    http://hitech.prophp.org/link615.html
    http://hitech.prophp.org/link616.html
    http://hitech.prophp.org/link617.html
    http://hitech.prophp.org/link618.html
    http://hitech.prophp.org/link619.html
    http://hitech.prophp.org/link620.html
    http://hitech.prophp.org/link621.html
    http://hitech.prophp.org/link622.html
    http://hitech.prophp.org/link623.html
    http://hitech.prophp.org/link624.html
    http://hitech.prophp.org/link625.html
    http://hitech.prophp.org/link626.html
    http://hitech.prophp.org/link627.html
    http://hitech.prophp.org/link628.html
    http://hitech.prophp.org/link629.html
    http://hitech.prophp.org/link630.html
    http://hitech.prophp.org/link631.html
    http://hitech.prophp.org/link632.html
    http://hitech.prophp.org/link633.html
    http://hitech.prophp.org/link634.html
    http://hitech.prophp.org/link635.html
    http://hitech.prophp.org/link636.html
    http://hitech.prophp.org/link637.html
    http://hitech.prophp.org/link638.html
    http://hitech.prophp.org/link639.html
    http://hitech.prophp.org/link640.html
    http://hitech.prophp.org/link641.html
    http://hitech.prophp.org/link642.html
    http://hitech.prophp.org/link643.html
    http://hitech.prophp.org/link644.html
    http://hitech.prophp.org/link645.html
    http://hitech.prophp.org/link646.html
    http://hitech.prophp.org/link647.html
    http://hitech.prophp.org/link648.html
    http://hitech.prophp.org/link649.html
    http://hitech.prophp.org/link650.html
    http://hitech.prophp.org/link651.html
    http://hitech.prophp.org/link652.html
    http://hitech.prophp.org/link653.html
    http://hitech.prophp.org/link654.html
    http://hitech.prophp.org/link655.html
    http://hitech.prophp.org/link656.html
    http://hitech.prophp.org/link657.html
    http://hitech.prophp.org/link658.html
    http://hitech.prophp.org/link659.html
    http://hitech.prophp.org/link660.html
    http://hitech.prophp.org/link661.html
    http://hitech.prophp.org/link662.html
    http://hitech.prophp.org/link663.html
    http://hitech.prophp.org/link664.html
    http://hitech.prophp.org/link665.html
    http://hitech.prophp.org/link666.html
    http://hitech.prophp.org/link667.html
    http://hitech.prophp.org/link668.html
    http://hitech.prophp.org/link669.html
    http://hitech.prophp.org/link670.html
    http://hitech.prophp.org/link671.html
    http://hitech.prophp.org/link672.html
    http://hitech.prophp.org/link673.html
    http://hitech.prophp.org/link674.html
    http://hitech.prophp.org/link675.html
    http://hitech.prophp.org/link676.html
    http://hitech.prophp.org/link677.html
    http://hitech.prophp.org/link678.html
    http://hitech.prophp.org/link679.html
    http://hitech.prophp.org/link680.html
    http://hitech.prophp.org/link681.html
    http://hitech.prophp.org/link682.html
    http://hitech.prophp.org/link683.html
    http://hitech.prophp.org/link684.html
    http://hitech.prophp.org/link685.html
    http://hitech.prophp.org/link686.html
    http://hitech.prophp.org/link687.html
    http://hitech.prophp.org/link688.html
    http://hitech.prophp.org/link689.html
    http://hitech.prophp.org/link690.html
    http://hitech.prophp.org/link691.html
    http://hitech.prophp.org/link692.html
    http://hitech.prophp.org/link693.html
    http://hitech.prophp.org/link694.html
    http://hitech.prophp.org/link695.html
    http://hitech.prophp.org/link696.html
    http://hitech.prophp.org/link697.html
    http://hitech.prophp.org/link698.html
    http://hitech.prophp.org/link699.html
    http://hitech.prophp.org/link700.html
    http://hitech.prophp.org/link701.html
    http://hitech.prophp.org/link702.html
    http://hitech.prophp.org/link703.html
    http://hitech.prophp.org/link704.html
    http://hitech.prophp.org/link705.html
    http://hitech.prophp.org/link706.html
    http://hitech.prophp.org/link707.html
    http://hitech.prophp.org/link708.html
    http://hitech.prophp.org/link709.html
    http://hitech.prophp.org/link710.html
    http://hitech.prophp.org/link711.html
    http://hitech.prophp.org/link712.html
    http://hitech.prophp.org/link713.html
    http://hitech.prophp.org/link714.html
    http://hitech.prophp.org/link715.html
    http://hitech.prophp.org/link716.html
    http://hitech.prophp.org/link717.html
    http://hitech.prophp.org/link718.html
    http://hitech.prophp.org/link719.html
    http://hitech.prophp.org/link720.html
    http://hitech.prophp.org/link721.html
    http://hitech.prophp.org/link722.html
    http://hitech.prophp.org/link723.html
    http://hitech.prophp.org/link724.html
    http://hitech.prophp.org/link725.html
    http://hitech.prophp.org/link726.html
    http://hitech.prophp.org/link727.html
    http://hitech.prophp.org/link728.html
    http://hitech.prophp.org/link729.html
    http://hitech.prophp.org/link730.html
    http://hitech.prophp.org/link731.html
    http://hitech.prophp.org/link732.html
    http://hitech.prophp.org/link733.html
    http://hitech.prophp.org/link734.html
    http://hitech.prophp.org/link735.html
    http://hitech.prophp.org/link736.html
    http://hitech.prophp.org/link737.html
    http://hitech.prophp.org/link738.html
    http://hitech.prophp.org/link739.html
    http://hitech.prophp.org/link740.html
    http://hitech.prophp.org/link741.html
    http://hitech.prophp.org/link742.html
    http://hitech.prophp.org/link743.html
    http://hitech.prophp.org/link744.html
    http://hitech.prophp.org/link745.html
    http://hitech.prophp.org/link746.html
    http://hitech.prophp.org/link747.html
    http://hitech.prophp.org/link748.html
    http://hitech.prophp.org/link749.html
    http://hitech.prophp.org/link750.html
    http://hitech.prophp.org/link751.html
    http://hitech.prophp.org/link752.html
    http://hitech.prophp.org/link753.html
    http://hitech.prophp.org/link754.html
    http://hitech.prophp.org/link755.html
    http://hitech.prophp.org/link756.html
    http://hitech.prophp.org/link757.html
    http://hitech.prophp.org/link758.html
    http://hitech.prophp.org/link759.html
    http://hitech.prophp.org/link760.html
    http://hitech.prophp.org/link761.html
    http://hitech.prophp.org/link762.html
    http://hitech.prophp.org/link763.html
    http://hitech.prophp.org/link764.html
    http://hitech.prophp.org/link765.html
    http://hitech.prophp.org/link766.html
    http://hitech.prophp.org/link767.html
    http://hitech.prophp.org/link768.html
    http://hitech.prophp.org/link769.html
    http://hitech.prophp.org/link770.html
    http://hitech.prophp.org/link771.html
    http://hitech.prophp.org/link772.html
    http://hitech.prophp.org/link773.html
    http://hitech.prophp.org/link774.html
    http://hitech.prophp.org/link775.html
    http://hitech.prophp.org/link776.html
    http://hitech.prophp.org/link777.html
    http://hitech.prophp.org/link778.html
    http://hitech.prophp.org/link779.html
    http://hitech.prophp.org/link780.html
    http://hitech.prophp.org/link781.html
    http://hitech.prophp.org/link782.html
    http://hitech.prophp.org/link783.html
    http://hitech.prophp.org/link784.html
    http://hitech.prophp.org/link785.html
    http://hitech.prophp.org/link786.html
    http://hitech.prophp.org/link787.html
    http://hitech.prophp.org/link788.html
    http://hitech.prophp.org/link789.html
    http://hitech.prophp.org/link790.html
    http://hitech.prophp.org/link791.html
    http://hitech.prophp.org/link792.html
    http://hitech.prophp.org/link793.html
    http://hitech.prophp.org/link794.html
    http://hitech.prophp.org/link795.html
    http://hitech.prophp.org/link796.html
    http://hitech.prophp.org/link797.html
    http://hitech.prophp.org/link798.html
    http://hitech.prophp.org/link799.html
    http://hitech.prophp.org/link800.html
    http://hitech.prophp.org/link801.html
    http://hitech.prophp.org/link802.html
    http://hitech.prophp.org/link803.html
    http://hitech.prophp.org/link804.html
    http://hitech.prophp.org/link805.html
    http://hitech.prophp.org/link806.html
    http://hitech.prophp.org/link807.html
    http://hitech.prophp.org/link808.html
    http://hitech.prophp.org/link809.html
    http://hitech.prophp.org/link810.html
    http://hitech.prophp.org/link811.html
    http://hitech.prophp.org/link812.html
    http://hitech.prophp.org/link813.html
    http://hitech.prophp.org/link814.html
    http://hitech.prophp.org/link815.html
    http://hitech.prophp.org/link816.html
    http://hitech.prophp.org/link817.html
    http://hitech.prophp.org/link818.html
    http://hitech.prophp.org/link819.html
    http://hitech.prophp.org/link820.html
    http://hitech.prophp.org/link821.html
    http://hitech.prophp.org/link822.html
    http://hitech.prophp.org/link823.html
    http://hitech.prophp.org/link824.html
    http://hitech.prophp.org/link825.html
    http://hitech.prophp.org/link826.html
    http://hitech.prophp.org/link827.html
    http://hitech.prophp.org/link828.html
    http://hitech.prophp.org/link829.html
    http://hitech.prophp.org/link830.html
    http://hitech.prophp.org/link831.html
    http://hitech.prophp.org/link832.html
    http://hitech.prophp.org/link833.html
    http://hitech.prophp.org/link834.html
    http://hitech.prophp.org/link835.html
    http://hitech.prophp.org/link836.html
    http://hitech.prophp.org/link837.html
    http://hitech.prophp.org/link838.html
    http://hitech.prophp.org/link839.html
    http://hitech.prophp.org/link840.html
    http://hitech.prophp.org/link841.html
    http://hitech.prophp.org/link842.html
    http://hitech.prophp.org/link843.html
    http://hitech.prophp.org/link844.html
    http://hitech.prophp.org/link845.html
    http://hitech.prophp.org/link846.html
    http://hitech.prophp.org/link847.html
    http://hitech.prophp.org/link848.html
    http://hitech.prophp.org/link849.html
    http://hitech.prophp.org/link850.html
    http://hitech.prophp.org/link851.html
    http://hitech.prophp.org/link852.html
    http://hitech.prophp.org/link853.html
    http://hitech.prophp.org/link854.html
    http://hitech.prophp.org/link855.html
    http://hitech.prophp.org/link856.html
    http://hitech.prophp.org/link857.html
    http://hitech.prophp.org/link858.html
    http://hitech.prophp.org/link859.html
    http://hitech.prophp.org/link860.html
    http://hitech.prophp.org/link861.html
    http://hitech.prophp.org/link862.html
    http://hitech.prophp.org/link863.html
    http://hitech.prophp.org/link864.html
    http://hitech.prophp.org/link865.html
    http://hitech.prophp.org/link866.html
    http://hitech.prophp.org/link867.html
    http://hitech.prophp.org/link868.html
    http://hitech.prophp.org/link869.html
    http://hitech.prophp.org/link870.html
    http://hitech.prophp.org/link871.html
    http://hitech.prophp.org/link872.html
    http://hitech.prophp.org/link873.html
    http://hitech.prophp.org/link874.html
    http://hitech.prophp.org/link875.html
    http://hitech.prophp.org/link876.html
    http://hitech.prophp.org/link877.html
    http://hitech.prophp.org/link878.html
    http://hitech.prophp.org/link879.html
    http://hitech.prophp.org/link880.html
    http://hitech.prophp.org/link881.html
    http://hitech.prophp.org/link882.html
    http://hitech.prophp.org/link883.html
    http://hitech.prophp.org/link884.html
    http://hitech.prophp.org/link885.html
    http://hitech.prophp.org/link886.html
    http://hitech.prophp.org/link887.html
    http://hitech.prophp.org/link888.html
    http://hitech.prophp.org/link889.html
    http://hitech.prophp.org/link890.html
    http://hitech.prophp.org/link891.html
    http://hitech.prophp.org/link892.html
    http://hitech.prophp.org/link893.html
    http://hitech.prophp.org/link894.html
    http://hitech.prophp.org/link895.html
    http://hitech.prophp.org/link896.html
    http://hitech.prophp.org/link897.html
    http://hitech.prophp.org/link898.html
    http://hitech.prophp.org/link899.html
    http://hitech.prophp.org/link900.html
    http://hitech.prophp.org/link901.html
    http://hitech.prophp.org/link902.html
    http://hitech.prophp.org/link903.html
    http://hitech.prophp.org/link904.html
    http://hitech.prophp.org/link905.html
    http://hitech.prophp.org/link906.html
    http://hitech.prophp.org/link907.html
    http://hitech.prophp.org/link908.html
    http://hitech.prophp.org/link909.html
    http://hitech.prophp.org/link910.html
    http://hitech.prophp.org/link911.html
    http://hitech.prophp.org/link912.html
    http://hitech.prophp.org/link913.html
    http://hitech.prophp.org/link914.html
    http://hitech.prophp.org/link915.html
    http://hitech.prophp.org/link916.html
    http://hitech.prophp.org/link917.html
    http://hitech.prophp.org/link918.html
    http://hitech.prophp.org/link919.html
    http://hitech.prophp.org/link920.html
    http://hitech.prophp.org/link921.html
    http://hitech.prophp.org/link922.html
    http://hitech.prophp.org/link923.html
    http://hitech.prophp.org/link924.html
    http://hitech.prophp.org/link925.html
    http://hitech.prophp.org/link926.html
    http://hitech.prophp.org/link927.html
    http://hitech.prophp.org/link928.html
    http://hitech.prophp.org/link929.html
    http://hitech.prophp.org/link930.html
    http://hitech.prophp.org/link931.html
    http://hitech.prophp.org/link932.html
    http://hitech.prophp.org/link933.html
    http://hitech.prophp.org/link934.html
    http://hitech.prophp.org/link935.html
    http://hitech.prophp.org/link936.html
    http://hitech.prophp.org/link937.html
    http://hitech.prophp.org/link938.html
    http://hitech.prophp.org/link939.html
    http://hitech.prophp.org/link940.html
    http://hitech.prophp.org/link941.html
    http://hitech.prophp.org/link942.html
    http://hitech.prophp.org/link943.html
    http://hitech.prophp.org/link944.html
    http://hitech.prophp.org/link945.html
    http://hitech.prophp.org/link946.html
    http://hitech.prophp.org/link947.html
    http://hitech.prophp.org/link948.html
    http://hitech.prophp.org/link949.html
    http://hitech.prophp.org/link950.html
    http://hitech.prophp.org/link951.html
    http://hitech.prophp.org/link952.html
    http://hitech.prophp.org/link953.html
    http://hitech.prophp.org/link954.html
    http://hitech.prophp.org/link955.html
    http://hitech.prophp.org/link956.html
    http://hitech.prophp.org/link957.html
    http://hitech.prophp.org/link958.html
    http://hitech.prophp.org/link959.html
    http://hitech.prophp.org/link960.html
    http://hitech.prophp.org/link961.html
    http://hitech.prophp.org/link962.html
    http://hitech.prophp.org/link963.html
    http://hitech.prophp.org/link964.html
    http://hitech.prophp.org/link965.html
    http://hitech.prophp.org/link966.html
    http://hitech.prophp.org/link967.html
    http://hitech.prophp.org/link968.html
    http://hitech.prophp.org/link969.html
    http://hitech.prophp.org/link970.html
    http://hitech.prophp.org/link971.html
    http://hitech.prophp.org/link972.html
    http://hitech.prophp.org/link973.html
    http://hitech.prophp.org/link974.html
    http://hitech.prophp.org/link975.html
    http://hitech.prophp.org/link976.html
    http://hitech.prophp.org/link977.html
    http://hitech.prophp.org/link978.html
    http://hitech.prophp.org/link979.html
    http://hitech.prophp.org/link980.html
    http://hitech.prophp.org/link981.html
    http://hitech.prophp.org/link982.html
    http://hitech.prophp.org/link983.html
    http://hitech.prophp.org/link984.html
    http://hitech.prophp.org/link985.html
    http://hitech.prophp.org/link986.html
    http://hitech.prophp.org/link987.html
    http://hitech.prophp.org/link988.html
    http://hitech.prophp.org/link989.html
    http://hitech.prophp.org/link990.html
    http://hitech.prophp.org/link991.html
    http://hitech.prophp.org/link992.html
    http://hitech.prophp.org/link993.html
    http://hitech.prophp.org/link994.html
    http://hitech.prophp.org/link995.html
    http://hitech.prophp.org/link996.html
    http://hitech.prophp.org/link997.html
    http://hitech.prophp.org/link998.html
    http://hitech.prophp.org/link999.html

Leave a Reply

Spam is a pain, I am sorry to have to do this to you, but can you answer the question below?

Q: Type in the word 'ajax'