killbill-uncached

Changes

payment/pom.xml 5(+5 -0)

Details

diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java b/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java
index a315a2c..ecae293 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/migration/MockModuleNoEntitlement.java
@@ -16,11 +16,7 @@
 
 package com.ning.billing.invoice.api.migration;
 
-import static org.testng.Assert.assertNotNull;
-
-import java.io.IOException;
-import java.net.URL;
-
+import org.mockito.Mockito;
 import org.skife.config.ConfigurationObjectFactory;
 
 import com.ning.billing.invoice.MockModule;
@@ -29,44 +25,25 @@ import com.ning.billing.invoice.glue.DefaultInvoiceModule;
 import com.ning.billing.invoice.notification.NextBillingDateNotifier;
 import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.invoice.notification.NullInvoiceNotifier;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.util.email.templates.TemplateModule;
 import com.ning.billing.util.template.translation.TranslatorConfig;
 
 public class MockModuleNoEntitlement extends MockModule {
-//	@Override
-//	protected void installEntitlementModule() {
-//		BillingApi entitlementApi = BrainDeadProxyFactory.createBrainDeadProxyFor(BillingApi.class);
-//        ((ZombieControl)entitlementApi).addResult("setChargedThroughDateFromTransaction", BrainDeadProxyFactory.ZOMBIE_VOID);
-//        ((ZombieControl)entitlementApi).addResult("getBillingEventsForAccountAndUpdateAccountBCD", BrainDeadProxyFactory.ZOMBIE_VOID);
-//		//bind(BillingApi.class).toInstance(entitlementApi);
-////        bind(EntitlementUserApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementUserApi.class));
-//        ChargeThruApi cta = BrainDeadProxyFactory.createBrainDeadProxyFor(ChargeThruApi.class);
-//        bind(ChargeThruApi.class).toInstance(cta);
-//        ((ZombieControl)cta).addResult("setChargedThroughDateFromTransaction", BrainDeadProxyFactory.ZOMBIE_VOID);
-//	}
-
     @Override
     protected void installInvoiceModule() {
         install(new DefaultInvoiceModule() {
-
             @Override
             protected void installNotifiers() {
-                bind(NextBillingDateNotifier.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(NextBillingDateNotifier.class));
-                final NextBillingDatePoster poster = BrainDeadProxyFactory.createBrainDeadProxyFor(NextBillingDatePoster.class);
-                ((ZombieControl) poster).addResult("insertNextBillingNotification", BrainDeadProxyFactory.ZOMBIE_VOID);
+                bind(NextBillingDateNotifier.class).toInstance(Mockito.mock(NextBillingDateNotifier.class));
+                final NextBillingDatePoster poster = Mockito.mock(NextBillingDatePoster.class);
                 bind(NextBillingDatePoster.class).toInstance(poster);
                 bind(InvoiceNotifier.class).to(NullInvoiceNotifier.class).asEagerSingleton();
 
                 final TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
                 bind(TranslatorConfig.class).toInstance(config);
             }
-
-
         });
-        install(new TemplateModule());
-
 
+        install(new TemplateModule());
     }
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
index 7bbeb76..0f6d556 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/migration/TestDefaultInvoiceMigrationApi.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
+import org.mockito.Mockito;
 import org.skife.jdbi.v2.Handle;
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.TransactionCallback;
@@ -29,11 +30,8 @@ import org.skife.jdbi.v2.TransactionStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
-import org.testng.annotations.AfterClass;
 import org.testng.annotations.AfterSuite;
-import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
@@ -64,8 +62,6 @@ import com.ning.billing.invoice.notification.NullInvoiceNotifier;
 import com.ning.billing.invoice.tests.InvoicingTestBase;
 import com.ning.billing.junction.api.BillingApi;
 import com.ning.billing.junction.api.BillingEventSet;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.util.bus.BusService;
 import com.ning.billing.util.bus.DefaultBusService;
 import com.ning.billing.util.callcontext.CallContext;
@@ -116,7 +112,6 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
 
     private IDBI dbi;
 
-
     private static final BigDecimal MIGRATION_INVOICE_AMOUNT = new BigDecimal("100.00");
     private static final Currency MIGRATION_INVOICE_CURRENCY = Currency.USD;
 
@@ -124,11 +119,11 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
 
     //@BeforeTest(groups = {"slow"})
     public void cleanup() {
-        if (dbi !=  null) {
+        if (dbi != null) {
             dbi.inTransaction(new TransactionCallback<Void>() {
                 @Override
                 public Void inTransaction(final Handle h, final TransactionStatus status)
-                throws Exception {
+                        throws Exception {
                     h.execute("truncate table invoices");
                     h.execute("truncate table invoice_items");
                     h.execute("truncate table invoice_payments");
@@ -138,7 +133,6 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
         }
     }
 
-
     @BeforeSuite(groups = {"slow"})
     public void setup() throws Exception {
         log.info("Starting set up");
@@ -158,7 +152,6 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
         cleanup();
         busService.getBus().start();
 
-        ((ZombieControl) billingApi).addResult("setChargedThroughDate", BrainDeadProxyFactory.ZOMBIE_VOID);
         migrationInvoiceId = createAndCheckMigrationInvoice();
         regularInvoiceId = generateRegularInvoice();
 
@@ -195,16 +188,16 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
     }
 
     private UUID generateRegularInvoice() throws Exception {
-        final AccountUserApi accountUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
-        final Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
-        ((ZombieControl) accountUserApi).addResult("getAccountById", account);
-        ((ZombieControl) account).addResult("getCurrency", Currency.USD);
-        ((ZombieControl) account).addResult("getId", accountId);
-        ((ZombieControl) account).addResult("isNotifiedForInvoices", true);
-
-        final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
-        ((ZombieControl) subscription).addResult("getId", subscriptionId);
-        ((ZombieControl) subscription).addResult("getBundleId", new UUID(0L, 0L));
+        final AccountUserApi accountUserApi = Mockito.mock(AccountUserApi.class);
+        final Account account = Mockito.mock(Account.class);
+        Mockito.when(accountUserApi.getAccountById(accountId)).thenReturn(account);
+        Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
+        Mockito.when(account.getId()).thenReturn(accountId);
+        Mockito.when(account.isNotifiedForInvoices()).thenReturn(true);
+
+        final Subscription subscription = Mockito.mock(Subscription.class);
+        Mockito.when(subscription.getId()).thenReturn(subscriptionId);
+        Mockito.when(subscription.getBundleId()).thenReturn(new UUID(0L, 0L));
         final BillingEventSet events = new MockBillingEventSet();
         final Plan plan = MockPlan.createBicycleNoTrialEvergreen1USD();
         final PlanPhase planPhase = MockPlanPhase.create1USDMonthlyEvergreen();
@@ -215,7 +208,7 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
                                           fixedPrice, BigDecimal.ONE, currency, BillingPeriod.MONTHLY, 1,
                                           BillingModeType.IN_ADVANCE, "", 1L, SubscriptionTransitionType.CREATE));
 
-        ((ZombieControl) billingApi).addResult("getBillingEventsForAccountAndUpdateAccountBCD", events);
+        Mockito.when(billingApi.getBillingEventsForAccountAndUpdateAccountBCD(accountId)).thenReturn(events);
 
         final InvoiceNotifier invoiceNotifier = new NullInvoiceNotifier();
         final InvoiceDispatcher dispatcher = new InvoiceDispatcher(generator, accountUserApi, billingApi,
@@ -251,7 +244,6 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
         Assert.assertEquals(unpaid.size(), 2);
     }
 
-
     // Check migration invoice IS returned for payment api calls
     @Test(groups = {"slow"}, enabled = true)
     public void testPaymentApi() {
@@ -261,7 +253,6 @@ public class TestDefaultInvoiceMigrationApi extends InvoicingTestBase {
         Assert.assertTrue(checkContains(allByAccount, migrationInvoiceId));
     }
 
-
     // ACCOUNT balance should reflect total of migration and non-migration invoices
     @Test(groups = {"slow"}, enabled = true)
     public void testBalance() {
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
index 87978ab..d4d0e93 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
+import org.mockito.Mockito;
 import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.DefaultPrice;
@@ -54,8 +55,6 @@ import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
 import com.ning.billing.invoice.model.RecurringInvoiceItem;
 import com.ning.billing.invoice.model.RepairAdjInvoiceItem;
 import com.ning.billing.junction.api.BillingEventSet;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.ControlTagType;
@@ -99,7 +98,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final DateTime startDate = new DateTime(2010, 1, 1, 0, 0, 0, 0);
         final DateTime endDate = new DateTime(2010, 4, 1, 0, 0, 0, 0);
         final InvoiceItem invoiceItem = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, "test plan", "test phase", startDate, endDate,
-                new BigDecimal("21.00"), new BigDecimal("7.00"), Currency.USD);
+                                                                 new BigDecimal("21.00"), new BigDecimal("7.00"), Currency.USD);
 
         invoice.addInvoiceItem(invoiceItem);
         invoiceDao.create(invoice, invoice.getTargetDate().getDayOfMonth(), context);
@@ -113,7 +112,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final BigDecimal paymentAmount = new BigDecimal("11.00");
         final UUID paymentId = UUID.randomUUID();
 
-        invoiceDao.notifyOfPayment(new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT,paymentId, invoiceId, clock.getUTCNow().plusDays(12), paymentAmount, Currency.USD), context);
+        invoiceDao.notifyOfPayment(new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, clock.getUTCNow().plusDays(12), paymentAmount, Currency.USD), context);
 
         final Invoice retrievedInvoice = invoiceDao.getById(invoiceId);
         assertNotNull(retrievedInvoice);
@@ -188,19 +187,19 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         DateTime endDate = startDate.plusMonths(1);
 
         final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
-                rate1, rate1, Currency.USD);
+                                                                    rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
-                rate2, rate2, Currency.USD);
+                                                                    rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
 
         final RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
-                rate3, rate3, Currency.USD);
+                                                                    rate3, rate3, Currency.USD);
         invoiceItemSqlDao.create(item3, context);
 
         final RecurringInvoiceItem item4 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
-                rate4, rate4, Currency.USD);
+                                                                    rate4, rate4, Currency.USD);
         invoiceItemSqlDao.create(item4, context);
 
         // Create invoice 2 (subscriptions 1-3)
@@ -213,15 +212,15 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         endDate = startDate.plusMonths(1);
 
         final RecurringInvoiceItem item5 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
-                rate1, rate1, Currency.USD);
+                                                                    rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item5, context);
 
         final RecurringInvoiceItem item6 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
-                rate2, rate2, Currency.USD);
+                                                                    rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(item6, context);
 
         final RecurringInvoiceItem item7 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
-                rate3, rate3, Currency.USD);
+                                                                    rate3, rate3, Currency.USD);
         invoiceItemSqlDao.create(item7, context);
 
         // Check that each subscription returns the correct number of invoices
@@ -264,19 +263,19 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         DateTime endDate = startDate.plusMonths(1);
 
         final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
-                rate1, Currency.USD);
+                                                                      rate1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         final FixedPriceInvoiceItem item2 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
-                rate2, Currency.USD);
+                                                                      rate2, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
 
         final FixedPriceInvoiceItem item3 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
-                rate3, Currency.USD);
+                                                                      rate3, Currency.USD);
         invoiceItemSqlDao.create(item3, context);
 
         final FixedPriceInvoiceItem item4 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
-                rate4, Currency.USD);
+                                                                      rate4, Currency.USD);
         invoiceItemSqlDao.create(item4, context);
 
         // create invoice 2 (subscriptions 1-3)
@@ -289,15 +288,15 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         endDate = startDate.plusMonths(1);
 
         final FixedPriceInvoiceItem item5 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
-                rate1, Currency.USD);
+                                                                      rate1, Currency.USD);
         invoiceItemSqlDao.create(item5, context);
 
         final FixedPriceInvoiceItem item6 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
-                rate2, Currency.USD);
+                                                                      rate2, Currency.USD);
         invoiceItemSqlDao.create(item6, context);
 
         final FixedPriceInvoiceItem item7 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
-                rate3, Currency.USD);
+                                                                      rate3, Currency.USD);
         invoiceItemSqlDao.create(item7, context);
 
         // check that each subscription returns the correct number of invoices
@@ -340,35 +339,35 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         DateTime endDate = startDate.plusMonths(1);
 
         final RecurringInvoiceItem recurringItem1 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
-                rate1, rate1, Currency.USD);
+                                                                             rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(recurringItem1, context);
 
         final RecurringInvoiceItem recurringItem2 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
-                rate2, rate2, Currency.USD);
+                                                                             rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(recurringItem2, context);
 
         final RecurringInvoiceItem recurringItem3 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
-                rate3, rate3, Currency.USD);
+                                                                             rate3, rate3, Currency.USD);
         invoiceItemSqlDao.create(recurringItem3, context);
 
         final RecurringInvoiceItem recurringItem4 = new RecurringInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
-                rate4, rate4, Currency.USD);
+                                                                             rate4, rate4, Currency.USD);
         invoiceItemSqlDao.create(recurringItem4, context);
 
         final FixedPriceInvoiceItem fixedItem1 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId1, "test plan", "test A", startDate, endDate,
-                rate1, Currency.USD);
+                                                                           rate1, Currency.USD);
         invoiceItemSqlDao.create(fixedItem1, context);
 
         final FixedPriceInvoiceItem fixedItem2 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId2, "test plan", "test B", startDate, endDate,
-                rate2, Currency.USD);
+                                                                           rate2, Currency.USD);
         invoiceItemSqlDao.create(fixedItem2, context);
 
         final FixedPriceInvoiceItem fixedItem3 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId3, "test plan", "test C", startDate, endDate,
-                rate3, Currency.USD);
+                                                                           rate3, Currency.USD);
         invoiceItemSqlDao.create(fixedItem3, context);
 
         final FixedPriceInvoiceItem fixedItem4 = new FixedPriceInvoiceItem(invoiceId1, accountId, bundleId, subscriptionId4, "test plan", "test D", startDate, endDate,
-                rate4, Currency.USD);
+                                                                           rate4, Currency.USD);
         invoiceItemSqlDao.create(fixedItem4, context);
 
         // create invoice 2 (subscriptions 1-3)
@@ -381,26 +380,26 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         endDate = startDate.plusMonths(1);
 
         final RecurringInvoiceItem recurringItem5 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
-                rate1, rate1, Currency.USD);
+                                                                             rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(recurringItem5, context);
 
         final RecurringInvoiceItem recurringItem6 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
-                rate2, rate2, Currency.USD);
+                                                                             rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(recurringItem6, context);
 
         final RecurringInvoiceItem recurringItem7 = new RecurringInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
-                rate3, rate3, Currency.USD);
+                                                                             rate3, rate3, Currency.USD);
         invoiceItemSqlDao.create(recurringItem7, context);
         final FixedPriceInvoiceItem fixedItem5 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId1, "test plan", "test phase A", startDate, endDate,
-                rate1, Currency.USD);
+                                                                           rate1, Currency.USD);
         invoiceItemSqlDao.create(fixedItem5, context);
 
         final FixedPriceInvoiceItem fixedItem6 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId2, "test plan", "test phase B", startDate, endDate,
-                rate2, Currency.USD);
+                                                                           rate2, Currency.USD);
         invoiceItemSqlDao.create(fixedItem6, context);
 
         final FixedPriceInvoiceItem fixedItem7 = new FixedPriceInvoiceItem(invoiceId2, accountId, bundleId, subscriptionId3, "test plan", "test phase C", startDate, endDate,
-                rate3, Currency.USD);
+                                                                           rate3, Currency.USD);
         invoiceItemSqlDao.create(fixedItem7, context);
 
         // check that each subscription returns the correct number of invoices
@@ -428,7 +427,6 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate2, Currency.USD);
         invoiceDao.create(invoice2, invoice2.getTargetDate().getDayOfMonth(), context);
 
-
         List<Invoice> invoices;
         invoices = invoiceDao.getInvoicesByAccount(accountId, new DateTime(2011, 1, 1, 0, 0, 0, 0));
         assertEquals(invoices.size(), 2);
@@ -461,22 +459,21 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final BigDecimal rate2 = new BigDecimal("42.0");
 
         final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
-                endDate, rate1, rate1, Currency.USD);
+                                                                    endDate, rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
-                endDate, rate2, rate2, Currency.USD);
+                                                                    endDate, rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
 
         final BigDecimal payment1 = new BigDecimal("48.0");
-        final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT,UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
+        final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD);
         invoicePaymentDao.create(payment, context);
 
         final BigDecimal balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(rate1.add(rate2).subtract(payment1)), 0);
     }
 
-
     @Test(groups = {"slow"})
     public void testAccountBalanceWithCredit() {
         final UUID accountId = UUID.randomUUID();
@@ -490,9 +487,8 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         final BigDecimal rate1 = new BigDecimal("17.0");
 
-
         final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
-                endDate, rate1, rate1, Currency.USD);
+                                                                    endDate, rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         final CreditAdjInvoiceItem creditItem = new CreditAdjInvoiceItem(invoice1.getId(), accountId, new DateTime(), rate1.negate(), Currency.USD);
@@ -517,11 +513,11 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final BigDecimal rate2 = new BigDecimal("42.0");
 
         final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
-                rate1, rate1, Currency.USD);
+                                                                    rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
-                rate2, rate2, Currency.USD);
+                                                                    rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
 
         final BigDecimal balance = invoiceDao.getAccountBalance(accountId);
@@ -551,7 +547,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
     @Test(groups = {"slow"})
     public void testAccountBalanceWithRefundAndAdj() throws InvoiceApiException {
         testAccountBalanceWithRefundInternal(true);
-        }
+    }
 
     private void testAccountBalanceWithRefundInternal(boolean withAdjustment) throws InvoiceApiException {
 
@@ -568,10 +564,9 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final BigDecimal refund1 = new BigDecimal("-7.00");
         final BigDecimal rate2 = new BigDecimal("10.0");
 
-
         // Recurring item
         final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
-                endDate, rate1, rate1, Currency.USD);
+                                                                    endDate, rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
         BigDecimal balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(new BigDecimal("20.00")), 0);
@@ -595,33 +590,32 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
     @Test(groups = {"slow"})
     public void testAccountBalanceWithSmallRefundAndCBANoAdj() throws InvoiceApiException {
-        BigDecimal refundAmount =  new BigDecimal("-7.00");
-        BigDecimal expectedBalance =  new BigDecimal("-3.00");
+        BigDecimal refundAmount = new BigDecimal("-7.00");
+        BigDecimal expectedBalance = new BigDecimal("-3.00");
         testAccountBalanceWithRefundAndCBAInternal(false, refundAmount, expectedBalance);
     }
 
     @Test(groups = {"slow"})
     public void testAccountBalanceWithSmallRefundAndCBAWithAdj() throws InvoiceApiException {
-        BigDecimal refundAmount =  new BigDecimal("-7.00");
-        BigDecimal expectedBalance =  new BigDecimal("-3.00");
+        BigDecimal refundAmount = new BigDecimal("-7.00");
+        BigDecimal expectedBalance = new BigDecimal("-3.00");
         testAccountBalanceWithRefundAndCBAInternal(true, refundAmount, expectedBalance);
     }
 
     @Test(groups = {"slow"})
     public void testAccountBalanceWithLargeRefundAndCBANoAdj() throws InvoiceApiException {
-        BigDecimal refundAmount =  new BigDecimal("-20.00");
-        BigDecimal expectedBalance =  new BigDecimal("10.00");
+        BigDecimal refundAmount = new BigDecimal("-20.00");
+        BigDecimal expectedBalance = new BigDecimal("10.00");
         testAccountBalanceWithRefundAndCBAInternal(false, refundAmount, expectedBalance);
     }
 
     @Test(groups = {"slow"})
     public void testAccountBalanceWithLargeRefundAndCBAWithAdj() throws InvoiceApiException {
-        BigDecimal refundAmount =  new BigDecimal("-20.00");
-        BigDecimal expectedBalance =  BigDecimal.ZERO;
+        BigDecimal refundAmount = new BigDecimal("-20.00");
+        BigDecimal expectedBalance = BigDecimal.ZERO;
         testAccountBalanceWithRefundAndCBAInternal(true, refundAmount, expectedBalance);
     }
 
-
     private void testAccountBalanceWithRefundAndCBAInternal(boolean withAdjustment, final BigDecimal refundAmount, final BigDecimal expectedFinalBalance) throws InvoiceApiException {
         final UUID accountId = UUID.randomUUID();
         final UUID bundleId = UUID.randomUUID();
@@ -638,7 +632,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         // Fixed Item
         final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
-                endDate, amount1, Currency.USD);
+                                                                      endDate, amount1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         BigDecimal balance = invoiceDao.getAccountBalance(accountId);
@@ -646,7 +640,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         // Recurring item
         final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
-                endDate, rate1, rate1, Currency.USD);
+                                                                    endDate, rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(new BigDecimal("25.00")), 0);
@@ -662,7 +656,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         // Repair previous item with rate 2
         final RepairAdjInvoiceItem item2Repair = new RepairAdjInvoiceItem(invoice1.getId(), accountId, startDate, endDate, rate1.negate(), Currency.USD, item2.getId());
         final RecurringInvoiceItem item2Replace = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
-                endDate, rate2, rate2, Currency.USD);
+                                                                           endDate, rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(item2Repair, context);
         invoiceItemSqlDao.create(item2Replace, context);
         balance = invoiceDao.getAccountBalance(accountId);
@@ -673,7 +667,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         invoiceItemSqlDao.create(cbaItem, context);
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(new BigDecimal("-10.00")), 0);
-        BigDecimal cba =  invoiceDao.getAccountCBA(accountId);
+        BigDecimal cba = invoiceDao.getAccountCBA(accountId);
         assertEquals(cba.compareTo(new BigDecimal("10.00")), 0);
 
         // PARTIAL REFUND on the payment
@@ -681,7 +675,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(expectedFinalBalance), 0);
-        cba =  invoiceDao.getAccountCBA(accountId);
+        cba = invoiceDao.getAccountCBA(accountId);
 
         final BigDecimal expectedFinalCBA = (expectedFinalBalance.compareTo(BigDecimal.ZERO) < 0) ? expectedFinalBalance.negate() : BigDecimal.ZERO;
         assertEquals(cba.compareTo(expectedFinalCBA), 0);
@@ -703,10 +697,9 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final BigDecimal rate1 = new BigDecimal("20.0");
         final BigDecimal rate2 = new BigDecimal("10.0");
 
-
         // Fixed Item
         final FixedPriceInvoiceItem item1 = new FixedPriceInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate,
-                endDate, amount1, Currency.USD);
+                                                                      endDate, amount1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         BigDecimal balance = invoiceDao.getAccountBalance(accountId);
@@ -714,7 +707,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         // Recurring item
         final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
-                endDate, rate1, rate1, Currency.USD);
+                                                                    endDate, rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(new BigDecimal("25.00")), 0);
@@ -729,7 +722,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         // Repair previous item with rate 2
         final RepairAdjInvoiceItem item2Repair = new RepairAdjInvoiceItem(invoice1.getId(), accountId, startDate, endDate, rate1.negate(), Currency.USD, item2.getId());
         final RecurringInvoiceItem item2Replace = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
-                endDate, rate2, rate2, Currency.USD);
+                                                                           endDate, rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(item2Repair, context);
         invoiceItemSqlDao.create(item2Replace, context);
         balance = invoiceDao.getAccountBalance(accountId);
@@ -740,43 +733,39 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         invoiceItemSqlDao.create(cbaItem, context);
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(new BigDecimal("-10.00")), 0);
-        BigDecimal cba =  invoiceDao.getAccountCBA(accountId);
+        BigDecimal cba = invoiceDao.getAccountCBA(accountId);
         assertEquals(cba.compareTo(new BigDecimal("10.00")), 0);
 
         // partial REFUND on the payment (along with CBA generated by the system)
-        final InvoicePayment refund = new DefaultInvoicePayment(UUID.randomUUID(), InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), rate2.negate(), Currency.USD, null,  payment.getId());
+        final InvoicePayment refund = new DefaultInvoicePayment(UUID.randomUUID(), InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), rate2.negate(), Currency.USD, null, payment.getId());
         invoicePaymentDao.create(refund, context);
         final CreditBalanceAdjInvoiceItem cbaItem2 = new CreditBalanceAdjInvoiceItem(invoice1.getId(), accountId, new DateTime(), rate2.negate(), Currency.USD);
         invoiceItemSqlDao.create(cbaItem2, context);
 
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(BigDecimal.ZERO), 0);
-        cba =  invoiceDao.getAccountCBA(accountId);
+        cba = invoiceDao.getAccountCBA(accountId);
         assertEquals(cba.compareTo(BigDecimal.ZERO), 0);
 
-
-
         // NEXT RECURRING on invoice 2
 
         final Invoice invoice2 = new DefaultInvoice(accountId, clock.getUTCNow(), targetDate1.plusMonths(1), Currency.USD);
         invoiceDao.create(invoice2, invoice2.getTargetDate().getDayOfMonth(), context);
 
-
         final RecurringInvoiceItem nextItem = new RecurringInvoiceItem(invoice2.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test bla", startDate.plusMonths(1),
-                endDate.plusMonths(1), rate2, rate2, Currency.USD);
+                                                                       endDate.plusMonths(1), rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(nextItem, context);
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(new BigDecimal("10.00")), 0);
-        cba =  invoiceDao.getAccountCBA(accountId);
+        cba = invoiceDao.getAccountCBA(accountId);
         assertEquals(cba.compareTo(new BigDecimal("0.00")), 0);
 
-
         // FINALLY ISSUE A CREDIT ADJ
-        final CreditAdjInvoiceItem creditItem =  new CreditAdjInvoiceItem(invoice2.getId(), accountId, new DateTime(), rate2.negate(), Currency.USD);
+        final CreditAdjInvoiceItem creditItem = new CreditAdjInvoiceItem(invoice2.getId(), accountId, new DateTime(), rate2.negate(), Currency.USD);
         invoiceItemSqlDao.create(creditItem, context);
         balance = invoiceDao.getAccountBalance(accountId);
         assertEquals(balance.compareTo(new BigDecimal("0.00")), 0);
-        cba =  invoiceDao.getAccountCBA(accountId);
+        cba = invoiceDao.getAccountCBA(accountId);
         assertEquals(cba.compareTo(new BigDecimal("0.00")), 0);
 
     }
@@ -795,13 +784,12 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final BigDecimal rate1 = new BigDecimal("17.0");
         final BigDecimal rate2 = new BigDecimal("42.0");
 
-
         final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate,
-                rate1, rate1, Currency.USD);
+                                                                    rate1, rate1, Currency.USD);
         invoiceItemSqlDao.create(item1, context);
 
         final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate,
-                rate2, rate2, Currency.USD);
+                                                                    rate2, rate2, Currency.USD);
         invoiceItemSqlDao.create(item2, context);
 
         DateTime upToDate;
@@ -825,7 +813,7 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final BigDecimal rate3 = new BigDecimal("21.0");
 
         final RecurringInvoiceItem item3 = new RecurringInvoiceItem(invoice2.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase C", startDate2, endDate2,
-                rate3, rate3, Currency.USD);
+                                                                    rate3, rate3, Currency.USD);
         invoiceItemSqlDao.create(item3, context);
 
         upToDate = new DateTime(2011, 1, 1, 0, 0, 0, 0);
@@ -859,8 +847,8 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         final DateTime effectiveDate1 = new DateTime(2011, 2, 1, 0, 0, 0, 0);
         final BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan1, phase1, null,
-                recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent1", 1L, SubscriptionTransitionType.CREATE);
+                                                           recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+                                                           "testEvent1", 1L, SubscriptionTransitionType.CREATE);
 
         final BillingEventSet events = new MockBillingEventSet();
         events.add(event1);
@@ -877,8 +865,8 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         final DateTime effectiveDate2 = new DateTime(2011, 2, 15, 0, 0, 0, 0);
         final BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan2, phase2, null,
-                recurringPrice2.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent2", 2L, SubscriptionTransitionType.CREATE);
+                                                           recurringPrice2.getPrice(currency), currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+                                                           "testEvent2", 2L, SubscriptionTransitionType.CREATE);
         events.add(event2);
 
         // second invoice should be for one half (14/28 days) the difference between the rate plans
@@ -909,8 +897,8 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final DateTime effectiveDate = buildDateTime(2011, 1, 1);
 
         final BillingEvent event = createMockBillingEvent(null, subscription, effectiveDate, plan, phase, null,
-                recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 15, BillingModeType.IN_ADVANCE,
-                "testEvent", 1L, SubscriptionTransitionType.CREATE);
+                                                          recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 15, BillingModeType.IN_ADVANCE,
+                                                          "testEvent", 1L, SubscriptionTransitionType.CREATE);
         final BillingEventSet events = new MockBillingEventSet();
         events.add(event);
 
@@ -923,9 +911,9 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
     }
 
     private Subscription getZombieSubscription() {
-        final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
-        ((ZombieControl) subscription).addResult("getId", UUID.randomUUID());
-        ((ZombieControl) subscription).addResult("getBundleId", UUID.randomUUID());
+        final Subscription subscription = Mockito.mock(Subscription.class);
+        Mockito.when(subscription.getId()).thenReturn(UUID.randomUUID());
+        Mockito.when(subscription.getBundleId()).thenReturn(UUID.randomUUID());
         return subscription;
     }
 
@@ -948,8 +936,8 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final DateTime effectiveDate1 = buildDateTime(2011, 1, 1);
 
         final BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan, phase1, fixedPrice.getPrice(currency),
-                null, currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent1", 1L, SubscriptionTransitionType.CREATE);
+                                                           null, currency, BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+                                                           "testEvent1", 1L, SubscriptionTransitionType.CREATE);
         final BillingEventSet events = new MockBillingEventSet();
         events.add(event1);
 
@@ -966,8 +954,8 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         final DateTime effectiveDate2 = effectiveDate1.plusDays(30);
         final BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan, phase2, null,
-                recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent2", 2L, SubscriptionTransitionType.PHASE);
+                                                           recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+                                                           "testEvent2", 2L, SubscriptionTransitionType.PHASE);
         events.add(event2);
 
         final Invoice invoice2 = generator.generateInvoice(accountId, events, invoiceList, effectiveDate2, Currency.USD);
@@ -1013,16 +1001,16 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         final DateTime effectiveDate1 = buildDateTime(2011, 1, 1);
 
         final BillingEvent event1 = createMockBillingEvent(null, subscription, effectiveDate1, plan, phase1,
-                fixedPrice.getPrice(currency), null, currency,
-                BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
-                "testEvent1", 1L, SubscriptionTransitionType.CREATE);
+                                                           fixedPrice.getPrice(currency), null, currency,
+                                                           BillingPeriod.MONTHLY, 1, BillingModeType.IN_ADVANCE,
+                                                           "testEvent1", 1L, SubscriptionTransitionType.CREATE);
         final BillingEventSet events = new MockBillingEventSet();
         events.add(event1);
 
         final DateTime effectiveDate2 = effectiveDate1.plusDays(30);
         final BillingEvent event2 = createMockBillingEvent(null, subscription, effectiveDate2, plan, phase2, null,
-                recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
+                                                           recurringPrice.getPrice(currency), currency, BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+                                                           "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
         events.add(event2);
 
         final Invoice invoice = generator.generateInvoice(UUID.randomUUID(), events, null, effectiveDate2, Currency.USD);
@@ -1046,22 +1034,22 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
 
         final Subscription subscription = getZombieSubscription();
 
-        final Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
-        ((ZombieControl) plan).addResult("getName", "plan");
+        final Plan plan = Mockito.mock(Plan.class);
+        Mockito.when(plan.getName()).thenReturn("plan");
 
-        final PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
-        ((ZombieControl) phase1).addResult("getName", "plan-phase1");
+        final PlanPhase phase1 = Mockito.mock(PlanPhase.class);
+        Mockito.when(phase1.getName()).thenReturn("plan-phase1");
 
-        final PlanPhase phase2 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
-        ((ZombieControl) phase2).addResult("getName", "plan-phase2");
+        final PlanPhase phase2 = Mockito.mock(PlanPhase.class);
+        Mockito.when(phase2.getName()).thenReturn("plan-phase2");
 
         final BillingEventSet events = new MockBillingEventSet();
         final List<Invoice> invoices = new ArrayList<Invoice>();
 
         final BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
-                TEN, currency,
-                BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
+                                                           TEN, currency,
+                                                           BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+                                                           "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
         events.add(event1);
 
         Invoice invoice1 = generator.generateInvoice(UUID.randomUUID(), events, invoices, targetDate1, Currency.USD);
@@ -1071,9 +1059,9 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
         assertNotNull(invoice1.getInvoiceNumber());
 
         final BillingEvent event2 = createMockBillingEvent(null, subscription, targetDate1, plan, phase2, null,
-                TWENTY, currency,
-                BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
+                                                           TWENTY, currency,
+                                                           BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+                                                           "testEvent2", 2L, SubscriptionTransitionType.CHANGE);
         events.add(event2);
         Invoice invoice2 = generator.generateInvoice(UUID.randomUUID(), events, invoices, targetDate2, Currency.USD);
         invoiceDao.create(invoice2, invoice2.getTargetDate().getDayOfMonth(), context);
@@ -1085,20 +1073,20 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
     public void testAddingWrittenOffTag() throws InvoiceApiException, TagApiException {
         final Subscription subscription = getZombieSubscription();
 
-        final Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
-        ((ZombieControl) plan).addResult("getName", "plan");
+        final Plan plan = Mockito.mock(Plan.class);
+        Mockito.when(plan.getName()).thenReturn("plan");
 
-        final PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
-        ((ZombieControl) phase1).addResult("getName", "plan-phase1");
+        final PlanPhase phase1 = Mockito.mock(PlanPhase.class);
+        Mockito.when(phase1.getName()).thenReturn("plan-phase1");
 
         final DateTime targetDate1 = clock.getUTCNow();
         final Currency currency = Currency.USD;
 
         // create pseudo-random invoice
         final BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
-                TEN, currency,
-                BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
+                                                           TEN, currency,
+                                                           BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+                                                           "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
         final BillingEventSet events = new MockBillingEventSet();
         events.add(event1);
 
@@ -1116,20 +1104,20 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
     public void testRemoveWrittenOffTag() throws InvoiceApiException, TagApiException {
         final Subscription subscription = getZombieSubscription();
 
-        final Plan plan = BrainDeadProxyFactory.createBrainDeadProxyFor(Plan.class);
-        ((ZombieControl) plan).addResult("getName", "plan");
+        final Plan plan = Mockito.mock(Plan.class);
+        Mockito.when(plan.getName()).thenReturn("plan");
 
-        final PlanPhase phase1 = BrainDeadProxyFactory.createBrainDeadProxyFor(PlanPhase.class);
-        ((ZombieControl) phase1).addResult("getName", "plan-phase1");
+        final PlanPhase phase1 = Mockito.mock(PlanPhase.class);
+        Mockito.when(phase1.getName()).thenReturn("plan-phase1");
 
         final DateTime targetDate1 = clock.getUTCNow();
         final Currency currency = Currency.USD;
 
         // create pseudo-random invoice
         final BillingEvent event1 = createMockBillingEvent(null, subscription, targetDate1, plan, phase1, null,
-                TEN, currency,
-                BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
-                "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
+                                                           TEN, currency,
+                                                           BillingPeriod.MONTHLY, 31, BillingModeType.IN_ADVANCE,
+                                                           "testEvent1", 1L, SubscriptionTransitionType.CHANGE);
         final BillingEventSet events = new MockBillingEventSet();
         events.add(event1);
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java b/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java
index 378e50f..65f9289 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java
@@ -27,6 +27,7 @@ import java.util.UUID;
 
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -51,8 +52,6 @@ import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
-import com.ning.billing.invoice.generator.DefaultInvoiceGenerator;
-import com.ning.billing.invoice.generator.InvoiceGenerator;
 import com.ning.billing.invoice.model.CreditBalanceAdjInvoiceItem;
 import com.ning.billing.invoice.model.DefaultInvoice;
 import com.ning.billing.invoice.model.DefaultInvoicePayment;
@@ -60,8 +59,6 @@ import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
 import com.ning.billing.invoice.model.RecurringInvoiceItem;
 import com.ning.billing.invoice.tests.InvoicingTestBase;
 import com.ning.billing.junction.api.BillingEventSet;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.clock.DefaultClock;
@@ -151,9 +148,9 @@ public class TestDefaultInvoiceGenerator extends InvoicingTestBase {
     }
 
     private Subscription createZombieSubscription(final UUID subscriptionId) {
-        final Subscription sub = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
-        ((ZombieControl) sub).addResult("getId", subscriptionId);
-        ((ZombieControl) sub).addResult("getBundleId", UUID.randomUUID());
+        final Subscription sub = Mockito.mock(Subscription.class);
+        Mockito.when(sub.getId()).thenReturn(subscriptionId);
+        Mockito.when(sub.getBundleId()).thenReturn(UUID.randomUUID());
 
         return sub;
     }
@@ -947,7 +944,6 @@ public class TestDefaultInvoiceGenerator extends InvoicingTestBase {
         assertTrue(invoice3.getBalance().compareTo(FIFTEEN.multiply(TWO).add(TWELVE)) == 0);
     }
 
-
     @Test(groups = {"fast"})
     public void testAccountCredit() throws CatalogApiException, InvoiceApiException {
         final BillingEventSet billingEventSet = new MockBillingEventSet();
@@ -992,12 +988,12 @@ public class TestDefaultInvoiceGenerator extends InvoicingTestBase {
         assertEquals(finalInvoice.getNumberOfItems(), 2);
     }
 
-    private void printDetailInvoice(final Invoice  invoice) {
+    private void printDetailInvoice(final Invoice invoice) {
         log.info("--------------------  START DETAIL ----------------------");
         log.info("Invoice " + invoice.getId() + ": BALANCE = " + invoice.getBalance()
-                + ", CBA = " + invoice.getCBAAmount()
-                + ", CHARGE_AMOUNT = " + invoice.getChargedAmount()
-                + ", ADJ_AMOUNT = " + invoice.getCreditAdjAmount());
+                         + ", CBA = " + invoice.getCBAAmount()
+                         + ", CHARGE_AMOUNT = " + invoice.getChargedAmount()
+                         + ", ADJ_AMOUNT = " + invoice.getCreditAdjAmount());
 
         for (InvoiceItem cur : invoice.getInvoiceItems()) {
             log.info(cur.toString());
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
index e4bf810..5e2d0bb 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
@@ -19,22 +19,19 @@ package com.ning.billing.invoice.glue;
 import java.io.IOException;
 import java.net.URL;
 
+import org.mockito.Mockito;
 import org.skife.jdbi.v2.IDBI;
 
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.catalog.glue.CatalogModule;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.invoice.api.InvoiceNotifier;
-import com.ning.billing.invoice.dao.InvoiceItemSqlDao;
-import com.ning.billing.invoice.dao.InvoicePaymentSqlDao;
 import com.ning.billing.invoice.notification.MockNextBillingDateNotifier;
 import com.ning.billing.invoice.notification.MockNextBillingDatePoster;
 import com.ning.billing.invoice.notification.NextBillingDateNotifier;
 import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.invoice.notification.NullInvoiceNotifier;
 import com.ning.billing.junction.api.BillingApi;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.mock.glue.MockEntitlementModule;
 import com.ning.billing.util.callcontext.CallContextFactory;
 import com.ning.billing.util.callcontext.DefaultCallContextFactory;
@@ -52,31 +49,6 @@ import static org.testng.Assert.assertNotNull;
 
 public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
     private final MysqlTestingHelper helper = new MysqlTestingHelper();
-    private IDBI dbi;
-
-    public void startDb() throws IOException {
-        helper.startMysql();
-    }
-
-    public void initDb(final String ddl) throws IOException {
-        helper.initDb(ddl);
-    }
-
-    public void stopDb() {
-        helper.stopMysql();
-    }
-
-    public IDBI getDbi() {
-        return dbi;
-    }
-
-    public InvoiceItemSqlDao getInvoiceItemSqlDao() {
-        return dbi.onDemand(InvoiceItemSqlDao.class);
-    }
-
-    public InvoicePaymentSqlDao getInvoicePaymentSqlDao() {
-        return dbi.onDemand(InvoicePaymentSqlDao.class);
-    }
 
     private void installNotificationQueue() {
         bind(NotificationQueueService.class).to(MockNotificationQueueService.class).asEagerSingleton();
@@ -93,7 +65,7 @@ public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
     public void configure() {
         loadSystemPropertiesFromClasspath("/resource.properties");
 
-        dbi = helper.getDBI();
+        final IDBI dbi = helper.getDBI();
         bind(IDBI.class).toInstance(dbi);
 
         bind(Clock.class).to(DefaultClock.class).asEagerSingleton();
@@ -102,11 +74,9 @@ public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
         install(new TagStoreModule());
 
         installNotificationQueue();
-//      install(new AccountModule());
-        bind(AccountUserApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class));
+        bind(AccountUserApi.class).toInstance(Mockito.mock(AccountUserApi.class));
 
-        final BillingApi billingApi = BrainDeadProxyFactory.createBrainDeadProxyFor(BillingApi.class);
-        ((ZombieControl) billingApi).addResult("setChargedThroughDateFromTransaction", BrainDeadProxyFactory.ZOMBIE_VOID);
+        final BillingApi billingApi = Mockito.mock(BillingApi.class);
         bind(BillingApi.class).toInstance(billingApi);
 
         install(new CatalogModule());
@@ -117,7 +87,6 @@ public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
 
         install(new BusModule());
         install(new TemplateModule());
-
     }
 
     private static void loadSystemPropertiesFromClasspath(final String resource) {
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
index 82e500b..e2ac16c 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
@@ -22,6 +22,7 @@ import java.util.UUID;
 import java.util.concurrent.Callable;
 
 import org.joda.time.DateTime;
+import org.mockito.Mockito;
 import org.skife.config.ConfigurationObjectFactory;
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.Transaction;
@@ -42,13 +43,12 @@ import com.ning.billing.dbi.DBIProvider;
 import com.ning.billing.dbi.DbiConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.invoice.InvoiceDispatcher;
 import com.ning.billing.invoice.InvoiceListener;
 import com.ning.billing.invoice.glue.InvoiceModuleWithMocks;
 import com.ning.billing.lifecycle.KillbillService;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.mock.glue.MockClockModule;
 import com.ning.billing.mock.glue.MockJunctionModule;
 import com.ning.billing.util.bus.Bus;
@@ -108,7 +108,7 @@ public class TestNextBillingDateNotifier {
     }
 
     @BeforeClass(groups = {"slow"})
-    public void setup() throws KillbillService.ServiceException, IOException, ClassNotFoundException, SQLException {
+    public void setup() throws KillbillService.ServiceException, IOException, ClassNotFoundException, SQLException, EntitlementUserApiException {
         //TestApiBase.loadSystemPropertiesFromClasspath("/entitlement.properties");
         final Injector g = Guice.createInjector(Stage.PRODUCTION, new AbstractModule() {
 
@@ -145,9 +145,9 @@ public class TestNextBillingDateNotifier {
         notificationQueueService = g.getInstance(NotificationQueueService.class);
         final InvoiceDispatcher dispatcher = g.getInstance(InvoiceDispatcher.class);
 
-        final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
-        final EntitlementUserApi entitlementUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementUserApi.class);
-        ((ZombieControl) entitlementUserApi).addResult("getSubscriptionFromId", subscription);
+        final Subscription subscription = Mockito.mock(Subscription.class);
+        final EntitlementUserApi entitlementUserApi = Mockito.mock(EntitlementUserApi.class);
+        Mockito.when(entitlementUserApi.getSubscriptionFromId(Mockito.<UUID>any())).thenReturn(subscription);
 
         final CallContextFactory factory = new DefaultCallContextFactory(clock);
         listener = new InvoiceListenerMock(factory, dispatcher);
@@ -163,7 +163,6 @@ public class TestNextBillingDateNotifier {
         helper.initDb(testDdl);
     }
 
-
     @Test(enabled = true, groups = "slow")
     public void testInvoiceNotifier() throws Exception {
 
@@ -177,7 +176,6 @@ public class TestNextBillingDateNotifier {
         notifier.initialize();
         notifier.start();
 
-
         dao.inTransaction(new Transaction<Void, DummySqlTest>() {
             @Override
             public Void inTransaction(final DummySqlTest transactional,
@@ -188,11 +186,9 @@ public class TestNextBillingDateNotifier {
             }
         });
 
-
         // Move time in the future after the notification effectiveDate
         ((ClockMock) clock).setDeltaFromReality(3000);
 
-
         await().atMost(1, MINUTES).until(new Callable<Boolean>() {
             @Override
             public Boolean call() throws Exception {
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java b/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
index 8c9ace4..97dcd7f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestHtmlInvoiceGenerator.java
@@ -35,8 +35,6 @@ import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.formatters.InvoiceFormatterFactory;
 import com.ning.billing.invoice.template.HtmlInvoiceGenerator;
 import com.ning.billing.invoice.template.formatters.DefaultInvoiceFormatterFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.util.email.templates.MustacheTemplateEngine;
 import com.ning.billing.util.email.templates.TemplateEngine;
 import com.ning.billing.util.template.translation.TranslatorConfig;
@@ -72,20 +70,19 @@ public class TestHtmlInvoiceGenerator {
     }
 
     private Account createAccount() {
-        final Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
-        final ZombieControl zombieControl = (ZombieControl) account;
-        zombieControl.addResult("getExternalKey", "1234abcd");
-        zombieControl.addResult("getName", "Jim Smith");
-        zombieControl.addResult("getFirstNameLength", 3);
-        zombieControl.addResult("getEmail", "jim.smith@mail.com");
-        zombieControl.addResult("getLocale", Locale.US.toString());
-        zombieControl.addResult("getAddress1", "123 Some Street");
-        zombieControl.addResult("getAddress2", "Apt 456");
-        zombieControl.addResult("getCity", "Some City");
-        zombieControl.addResult("getStateOrProvince", "Some State");
-        zombieControl.addResult("getPostalCode", "12345-6789");
-        zombieControl.addResult("getCountry", "USA");
-        zombieControl.addResult("getPhone", "123-456-7890");
+        final Account account = Mockito.mock(Account.class);
+        Mockito.when(account.getExternalKey()).thenReturn("1234abcd");
+        Mockito.when(account.getName()).thenReturn("Jim Smith");
+        Mockito.when(account.getFirstNameLength()).thenReturn(3);
+        Mockito.when(account.getEmail()).thenReturn("jim.smith@mail.com");
+        Mockito.when(account.getLocale()).thenReturn(Locale.US.toString());
+        Mockito.when(account.getAddress1()).thenReturn("123 Some Street");
+        Mockito.when(account.getAddress2()).thenReturn("Apt 456");
+        Mockito.when(account.getCity()).thenReturn("Some City");
+        Mockito.when(account.getStateOrProvince()).thenReturn("Some State");
+        Mockito.when(account.getPostalCode()).thenReturn("12345-6789");
+        Mockito.when(account.getCountry()).thenReturn("USA");
+        Mockito.when(account.getPhone()).thenReturn("123-456-7890");
 
         return account;
     }
@@ -96,31 +93,29 @@ public class TestHtmlInvoiceGenerator {
 
         final BigDecimal price1 = new BigDecimal("29.95");
         final BigDecimal price2 = new BigDecimal("59.95");
-        final Invoice dummyInvoice = BrainDeadProxyFactory.createBrainDeadProxyFor(Invoice.class);
-        final ZombieControl zombie = (ZombieControl) dummyInvoice;
-        zombie.addResult("getInvoiceDate", startDate);
-        zombie.addResult("getInvoiceNumber", 42);
-        zombie.addResult("getCurrency", Currency.USD);
-        zombie.addResult("getChargedAmount", price1.add(price2));
-        zombie.addResult("getPaidAmount", BigDecimal.ZERO);
-        zombie.addResult("getBalance", price1.add(price2));
+        final Invoice dummyInvoice = Mockito.mock(Invoice.class);
+        Mockito.when(dummyInvoice.getInvoiceDate()).thenReturn(startDate);
+        Mockito.when(dummyInvoice.getInvoiceNumber()).thenReturn(42);
+        Mockito.when(dummyInvoice.getCurrency()).thenReturn(Currency.USD);
+        Mockito.when(dummyInvoice.getChargedAmount()).thenReturn(price1.add(price2));
+        Mockito.when(dummyInvoice.getPaidAmount()).thenReturn(BigDecimal.ZERO);
+        Mockito.when(dummyInvoice.getBalance()).thenReturn(price1.add(price2));
 
         final List<InvoiceItem> items = new ArrayList<InvoiceItem>();
         items.add(createInvoiceItem(price1, "Domain 1", startDate, endDate, "ning-plus"));
         items.add(createInvoiceItem(price2, "Domain 2", startDate, endDate, "ning-pro"));
-        zombie.addResult("getInvoiceItems", items);
+        Mockito.when(dummyInvoice.getInvoiceItems()).thenReturn(items);
 
         return dummyInvoice;
     }
 
     private InvoiceItem createInvoiceItem(final BigDecimal amount, final String networkName, final DateTime startDate, final DateTime endDate, final String planName) {
-        final InvoiceItem item = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoiceItem.class);
-        final ZombieControl zombie = (ZombieControl) item;
-        zombie.addResult("getAmount", amount);
-        zombie.addResult("getStartDate", startDate);
-        zombie.addResult("getEndDate", endDate);
-        zombie.addResult("getPlanName", planName);
-        zombie.addResult("getDescription", networkName);
+        final InvoiceItem item = Mockito.mock(InvoiceItem.class);
+        Mockito.when(item.getAmount()).thenReturn(amount);
+        Mockito.when(item.getStartDate()).thenReturn(startDate);
+        Mockito.when(item.getEndDate()).thenReturn(endDate);
+        Mockito.when(item.getPlanName()).thenReturn(planName);
+        Mockito.when(item.getDescription()).thenReturn(networkName);
 
         return item;
     }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
index b586cd7..0be1893 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
+import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -31,6 +32,7 @@ import org.testng.annotations.Test;
 
 import com.google.inject.Inject;
 import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.catalog.MockPlan;
 import com.ning.billing.catalog.MockPlanPhase;
@@ -52,8 +54,6 @@ import com.ning.billing.invoice.notification.NullInvoiceNotifier;
 import com.ning.billing.invoice.tests.InvoicingTestBase;
 import com.ning.billing.junction.api.BillingApi;
 import com.ning.billing.junction.api.BillingEventSet;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.util.bus.BusService;
 import com.ning.billing.util.bus.DefaultBusService;
 import com.ning.billing.util.callcontext.CallContext;
@@ -109,7 +109,6 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
         context = new DefaultCallContextFactory(clock).createCallContext("Miracle Max", CallOrigin.TEST, UserType.TEST);
 
         busService.getBus().start();
-        ((ZombieControl) billingApi).addResult("setChargedThroughDate", BrainDeadProxyFactory.ZOMBIE_VOID);
     }
 
     @AfterClass(groups = {"slow"})
@@ -124,21 +123,21 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
     }
 
     @Test(groups = {"slow"}, enabled = true)
-    public void testDryRunInvoice() throws InvoiceApiException {
+    public void testDryRunInvoice() throws InvoiceApiException, AccountApiException {
         final UUID accountId = UUID.randomUUID();
         final UUID subscriptionId = UUID.randomUUID();
 
-        final AccountUserApi accountUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
-        final Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
+        final AccountUserApi accountUserApi = Mockito.mock(AccountUserApi.class);
+        final Account account = Mockito.mock(Account.class);
 
-        ((ZombieControl) accountUserApi).addResult("getAccountById", account);
-        ((ZombieControl) account).addResult("getCurrency", Currency.USD);
-        ((ZombieControl) account).addResult("getId", accountId);
-        ((ZombieControl) account).addResult(("isNotifiedForInvoices"), true);
+        Mockito.when(accountUserApi.getAccountById(accountId)).thenReturn(account);
+        Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
+        Mockito.when(account.getId()).thenReturn(accountId);
+        Mockito.when(account.isNotifiedForInvoices()).thenReturn(true);
 
-        final Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
-        ((ZombieControl) subscription).addResult("getId", subscriptionId);
-        ((ZombieControl) subscription).addResult("getBundleId", new UUID(0L, 0L));
+        final Subscription subscription = Mockito.mock(Subscription.class);
+        Mockito.when(subscription.getId()).thenReturn(subscriptionId);
+        Mockito.when(subscription.getBundleId()).thenReturn(new UUID(0L, 0L));
         final BillingEventSet events = new MockBillingEventSet();
         final Plan plan = MockPlan.createBicycleNoTrialEvergreen1USD();
         final PlanPhase planPhase = MockPlanPhase.create1USDMonthlyEvergreen();
@@ -149,7 +148,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
                                           fixedPrice, BigDecimal.ONE, currency, BillingPeriod.MONTHLY, 1,
                                           BillingModeType.IN_ADVANCE, "", 1L, SubscriptionTransitionType.CREATE));
 
-        ((ZombieControl) billingApi).addResult("getBillingEventsForAccountAndUpdateAccountBCD", events);
+        Mockito.when(billingApi.getBillingEventsForAccountAndUpdateAccountBCD(accountId)).thenReturn(events);
 
         final DateTime target = new DateTime();
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
index 23c31c2..069869d 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
+import org.mockito.Mockito;
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.exceptions.TransactionFailedException;
 import org.testng.annotations.BeforeSuite;
@@ -44,8 +45,6 @@ import com.ning.billing.invoice.glue.InvoiceModuleWithEmbeddedDb;
 import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
 import com.ning.billing.invoice.notification.MockNextBillingDatePoster;
 import com.ning.billing.invoice.notification.NextBillingDatePoster;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TestCallContext;
@@ -63,7 +62,7 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
-public class TestChargeBacks  {
+public class TestChargeBacks {
     private static final BigDecimal FIFTEEN = new BigDecimal("15.00");
     private static final BigDecimal THIRTY = new BigDecimal("30.00");
     private static final BigDecimal ONE_MILLION = new BigDecimal("1000000.00");
@@ -73,10 +72,8 @@ public class TestChargeBacks  {
     private final Clock clock = new ClockMock();
     private static final Currency CURRENCY = Currency.EUR;
 
-
     @BeforeSuite(groups = {"slow"})
     public void setup() throws IOException {
-
         loadSystemPropertiesFromClasspath("/resource.properties");
 
         final MysqlTestingHelper helper = new MysqlTestingHelper();
@@ -102,7 +99,6 @@ public class TestChargeBacks  {
         context = new TestCallContext("Charge back tests");
     }
 
-
     private static void loadSystemPropertiesFromClasspath(final String resource) {
         final URL url = InvoiceModuleWithEmbeddedDb.class.getResource(resource);
         assertNotNull(url);
@@ -113,7 +109,6 @@ public class TestChargeBacks  {
         }
     }
 
-
     @Test(groups = {"slow"})
     public void testCompleteChargeBack() throws InvoiceApiException {
         final Invoice invoice = createAndPersistInvoice(THIRTY);
@@ -223,20 +218,20 @@ public class TestChargeBacks  {
     }
 
     private Invoice createAndPersistInvoice(final BigDecimal amount) {
-        final Invoice invoice = BrainDeadProxyFactory.createBrainDeadProxyFor(Invoice.class);
+        final Invoice invoice = Mockito.mock(Invoice.class);
         final UUID invoiceId = UUID.randomUUID();
         final UUID accountId = UUID.randomUUID();
-        final ZombieControl zombie = (ZombieControl) invoice;
-        zombie.addResult("getId", invoiceId);
-        zombie.addResult("getAccountId", accountId);
-        zombie.addResult("getInvoiceDate", clock.getUTCNow());
-        zombie.addResult("getTargetDate", clock.getUTCNow());
-        zombie.addResult("getCurrency", CURRENCY);
-        zombie.addResult("isMigrationInvoice", false);
+
+        Mockito.when(invoice.getId()).thenReturn(invoiceId);
+        Mockito.when(invoice.getAccountId()).thenReturn(accountId);
+        Mockito.when(invoice.getInvoiceDate()).thenReturn(clock.getUTCNow());
+        Mockito.when(invoice.getTargetDate()).thenReturn(clock.getUTCNow());
+        Mockito.when(invoice.getCurrency()).thenReturn(CURRENCY);
+        Mockito.when(invoice.isMigrationInvoice()).thenReturn(false);
 
         final List<InvoiceItem> items = new ArrayList<InvoiceItem>();
         items.add(createInvoiceItem(invoiceId, accountId, amount));
-        zombie.addResult("getInvoiceItems", items);
+        Mockito.when(invoice.getInvoiceItems()).thenReturn(items);
 
         invoiceSqlDao.create(invoice, context);
 
@@ -249,17 +244,15 @@ public class TestChargeBacks  {
     }
 
     private InvoicePayment createAndPersistPayment(final UUID invoiceId, final BigDecimal amount) {
-        final InvoicePayment payment = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoicePayment.class);
-        final ZombieControl zombie = (ZombieControl) payment;
-        zombie.addResult("getId", UUID.randomUUID());
-        zombie.addResult("getType", InvoicePaymentType.ATTEMPT);
-        zombie.addResult("getInvoiceId", invoiceId);
-        zombie.addResult("getPaymentId", UUID.randomUUID());
-        zombie.addResult("getPaymentDate", clock.getUTCNow());
-        zombie.addResult("getAmount", amount);
-        zombie.addResult("getCurrency", CURRENCY);
-        zombie.addResult("getLinkedInvoicePaymentId", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getPaymentCookieId", BrainDeadProxyFactory.ZOMBIE_VOID);
+        final InvoicePayment payment = Mockito.mock(InvoicePayment.class);
+        Mockito.when(payment.getId()).thenReturn(UUID.randomUUID());
+        Mockito.when(payment.getType()).thenReturn(InvoicePaymentType.ATTEMPT);
+        Mockito.when(payment.getInvoiceId()).thenReturn(invoiceId);
+        Mockito.when(payment.getPaymentId()).thenReturn(UUID.randomUUID());
+        Mockito.when(payment.getPaymentDate()).thenReturn(clock.getUTCNow());
+        Mockito.when(payment.getAmount()).thenReturn(amount);
+        Mockito.when(payment.getCurrency()).thenReturn(CURRENCY);
+
         invoicePaymentApi.notifyOfPayment(payment, context);
 
         return payment;

payment/pom.xml 5(+5 -0)

diff --git a/payment/pom.xml b/payment/pom.xml
index 7ba68ca..aad97d8 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -77,6 +77,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.testng</groupId>
             <artifactId>testng</artifactId>
             <scope>test</scope>
diff --git a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
index 6e33f2d..893544c 100644
--- a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -38,8 +39,6 @@ import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.mock.glue.MockClockModule;
 import com.ning.billing.mock.glue.MockJunctionModule;
 import com.ning.billing.payment.MockRecurringInvoiceItem;
@@ -138,8 +137,6 @@ public class TestPaymentApi {
     }
 
     private void testSimplePayment(final BigDecimal invoiceAmount, final BigDecimal requestedAmount, final BigDecimal expectedAmount) throws Exception {
-        ((ZombieControl) invoicePaymentApi).addResult("notifyOfPayment", BrainDeadProxyFactory.ZOMBIE_VOID);
-
         final DateTime now = new DateTime(DateTimeZone.UTC);
         final Invoice invoice = testHelper.createTestInvoice(account, now, Currency.USD);
 
@@ -192,7 +189,7 @@ public class TestPaymentApi {
 
         final PaymentMethodPlugin newPaymenrMethod = new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
         final UUID newPaymentMethodId = paymentApi.addPaymentMethod(PaymentTestModuleWithMocks.PLUGIN_TEST_NAME, account, true, newPaymenrMethod, context);
-        ((ZombieControl) account).addResult("getPaymentMethodId", newPaymentMethodId);
+        Mockito.when(account.getPaymentMethodId()).thenReturn(newPaymentMethodId);
 
         methods = paymentApi.getPaymentMethods(account, false);
         assertEquals(methods.size(), 2);
diff --git a/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithEmbeddedDb.java b/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithEmbeddedDb.java
index 4937184..1d2ed05 100644
--- a/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithEmbeddedDb.java
+++ b/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithEmbeddedDb.java
@@ -17,15 +17,17 @@
 package com.ning.billing.payment.glue;
 
 import java.util.HashMap;
+import java.util.UUID;
+
+import org.mockito.Mockito;
 
 import com.google.inject.Provider;
 import com.ning.billing.config.PaymentConfig;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.payment.provider.MockPaymentProviderPluginModule;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.bus.Bus;
 import com.ning.billing.util.bus.InMemoryBus;
+import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.glue.GlobalLockerModule;
 import com.ning.billing.util.notificationq.DefaultNotificationQueueService;
 import com.ning.billing.util.notificationq.NotificationQueueService;
@@ -35,11 +37,10 @@ public class PaymentTestModuleWithEmbeddedDb extends PaymentModule {
     public static class MockTagApiProvider implements Provider<TagUserApi> {
         @Override
         public TagUserApi get() {
-            final TagUserApi api = BrainDeadProxyFactory.createBrainDeadProxyFor(TagUserApi.class);
-            ((ZombieControl) api).addResult("getTags", new HashMap<String, Tag>());
+            final TagUserApi api = Mockito.mock(TagUserApi.class);
+            Mockito.when(api.getTags(Mockito.<UUID>any(), Mockito.<ObjectType>any())).thenReturn(new HashMap<String, Tag>());
             return api;
         }
-
     }
 
     @Override
diff --git a/payment/src/test/java/com/ning/billing/payment/TestHelper.java b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
index 6a9e422..abeaa54 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestHelper.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
@@ -19,6 +19,7 @@ package com.ning.billing.payment;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
+import org.mockito.Mockito;
 
 import com.google.inject.Inject;
 import com.ning.billing.account.api.Account;
@@ -28,8 +29,6 @@ import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceCreationEvent;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentMethodPlugin;
 import com.ning.billing.payment.glue.PaymentTestModuleWithMocks;
@@ -57,7 +56,6 @@ public class TestHelper {
         context = factory.createCallContext("Princess Buttercup", CallOrigin.TEST, UserType.TEST);
     }
 
-
     public Invoice createTestInvoice(final Account account,
                                      final DateTime targetDate,
                                      final Currency currency,
@@ -81,7 +79,7 @@ public class TestHelper {
             }
         }
 
-        ((ZombieControl) invoicePaymentApi).addResult("getInvoice", invoice);
+        Mockito.when(invoicePaymentApi.getInvoice(invoice.getId())).thenReturn(invoice);
         final InvoiceCreationEvent event = new MockInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
                                                                         invoice.getBalance(), invoice.getCurrency(),
                                                                         invoice.getInvoiceDate(),
@@ -95,34 +93,20 @@ public class TestHelper {
         final String name = "First" + UUID.randomUUID().toString() + " " + "Last" + UUID.randomUUID().toString();
         final String externalKey = UUID.randomUUID().toString();
 
-        final Account account = BrainDeadProxyFactory.createBrainDeadProxyFor(Account.class);
-        final ZombieControl zombie = (ZombieControl) account;
-        zombie.addResult("getId", UUID.randomUUID());
-        zombie.addResult("getExternalKey", externalKey);
-        zombie.addResult("getName", name);
-        zombie.addResult("getFirstNameLength", 10);
-        zombie.addResult("getPhone", "123-456-7890");
-        zombie.addResult("getEmail", email);
-        zombie.addResult("getCurrency", Currency.USD);
-        zombie.addResult("getBillCycleDay", 1);
-        zombie.addResult("isMigrated", false);
-        zombie.addResult("isNotifiedForInvoices", false);
-        zombie.addResult("getTimeZone", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getLocale", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getAddress1", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getAddress2", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getCompanyName", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getCity", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getStateOrProvince", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getCountry", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getPostalCode", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getPhone", BrainDeadProxyFactory.ZOMBIE_VOID);
-        zombie.addResult("getPaymentMethodId", BrainDeadProxyFactory.ZOMBIE_VOID);
-
-        ((ZombieControl) accountUserApi).addResult("getAccountById", account);
-        ((ZombieControl) accountUserApi).addResult("getAccountByKey", account);
-        ((ZombieControl) accountUserApi).addResult("updateAccount", BrainDeadProxyFactory.ZOMBIE_VOID);
-        //updateAccount
+        final Account account = Mockito.mock(Account.class);
+        Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
+        Mockito.when(account.getExternalKey()).thenReturn(externalKey);
+        Mockito.when(account.getName()).thenReturn(name);
+        Mockito.when(account.getFirstNameLength()).thenReturn(10);
+        Mockito.when(account.getPhone()).thenReturn("123-456-7890");
+        Mockito.when(account.getEmail()).thenReturn(email);
+        Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
+        Mockito.when(account.getBillCycleDay()).thenReturn(1);
+        Mockito.when(account.isMigrated()).thenReturn(false);
+        Mockito.when(account.isNotifiedForInvoices()).thenReturn(false);
+
+        Mockito.when(accountUserApi.getAccountById(Mockito.<UUID>any())).thenReturn(account);
+        Mockito.when(accountUserApi.getAccountByKey(Mockito.anyString())).thenReturn(account);
 
         final PaymentMethodPlugin pm = new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
         addTestPaymentMethod(account, pm);
@@ -131,8 +115,6 @@ public class TestHelper {
 
     private void addTestPaymentMethod(final Account account, final PaymentMethodPlugin paymentMethodInfo) throws Exception {
         final UUID paymentMethodId = paymentApi.addPaymentMethod(PaymentTestModuleWithMocks.PLUGIN_TEST_NAME, account, true, paymentMethodInfo, context);
-        final ZombieControl zombie = (ZombieControl) account;
-        zombie.addResult("getPaymentMethodId", paymentMethodId);
+        Mockito.when(account.getPaymentMethodId()).thenReturn(paymentMethodId);
     }
-
 }
diff --git a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
index 957ce75..3fa67e0 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
@@ -26,7 +26,6 @@ import java.util.concurrent.TimeoutException;
 
 import org.joda.time.DateTime;
 import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
@@ -37,8 +36,6 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.config.PaymentConfig;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
 import com.ning.billing.mock.glue.MockClockModule;
 import com.ning.billing.mock.glue.MockJunctionModule;
 import com.ning.billing.payment.api.Payment;
@@ -104,7 +101,6 @@ public class TestRetryService {
         mockPaymentProviderPlugin.clear();
 
         context = new DefaultCallContext("RetryServiceTests", CallOrigin.INTERNAL, UserType.TEST, clock);
-        ((ZombieControl) invoicePaymentApi).addResult("notifyOfPayment", BrainDeadProxyFactory.ZOMBIE_VOID);
     }
 
     @AfterMethod(groups = "fast")
@@ -137,7 +133,6 @@ public class TestRetryService {
         testSchedulesRetryInternal(paymentConfig.getPluginFailureRetryMaxAttempts() + 1, FailureType.PLUGIN_EXCEPTION);
     }
 
-
     @Test(groups = "fast")
     public void testFailedPaymentWithOneSuccessfulRetry() throws Exception {
         testSchedulesRetryInternal(1, FailureType.PAYMENT_FAILURE);
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockEntitlementModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockEntitlementModule.java
index 5037f48..d712082 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockEntitlementModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockEntitlementModule.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010-2011 Ning, Inc.
+ * Copyright 2010-2012 Ning, Inc.
  *
  * Ning licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
@@ -16,6 +16,8 @@
 
 package com.ning.billing.mock.glue;
 
+import org.mockito.Mockito;
+
 import com.google.inject.AbstractModule;
 import com.ning.billing.entitlement.api.EntitlementService;
 import com.ning.billing.entitlement.api.billing.ChargeThruApi;
@@ -23,41 +25,27 @@ import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi;
 import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.glue.EntitlementModule;
-import com.ning.billing.mock.BrainDeadProxyFactory;
 import com.ning.billing.util.glue.RealImplementation;
 
 public class MockEntitlementModule extends AbstractModule implements EntitlementModule {
-
-    /* (non-Javadoc)
-    * @see com.ning.billing.mock.glue.EntitlementModule#installEntitlementService()
-    */
     @Override
     public void installEntitlementService() {
-        bind(EntitlementService.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementService.class));
+        bind(EntitlementService.class).toInstance(Mockito.mock(EntitlementService.class));
     }
 
-    /* (non-Javadoc)
-    * @see com.ning.billing.mock.glue.EntitlementModule#installEntitlementUserApi()
-    */
     @Override
     public void installEntitlementUserApi() {
-        bind(EntitlementUserApi.class).annotatedWith(RealImplementation.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementUserApi.class));
+        bind(EntitlementUserApi.class).annotatedWith(RealImplementation.class).toInstance(Mockito.mock(EntitlementUserApi.class));
     }
 
-    /* (non-Javadoc)
-    * @see com.ning.billing.mock.glue.EntitlementModule#installEntitlementMigrationApi()
-    */
     @Override
     public void installEntitlementMigrationApi() {
-        bind(EntitlementMigrationApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementMigrationApi.class));
+        bind(EntitlementMigrationApi.class).toInstance(Mockito.mock(EntitlementMigrationApi.class));
     }
 
-    /* (non-Javadoc)
-    * @see com.ning.billing.mock.glue.EntitlementModule#installChargeThruApi()
-    */
     @Override
     public void installChargeThruApi() {
-        bind(ChargeThruApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(ChargeThruApi.class));
+        bind(ChargeThruApi.class).toInstance(Mockito.mock(ChargeThruApi.class));
     }
 
     @Override
@@ -71,6 +59,6 @@ public class MockEntitlementModule extends AbstractModule implements Entitlement
 
     @Override
     public void installEntitlementTimelineApi() {
-        bind(EntitlementTimelineApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementTimelineApi.class));
+        bind(EntitlementTimelineApi.class).toInstance(Mockito.mock(EntitlementTimelineApi.class));
     }
 }
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockInvoiceModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockInvoiceModule.java
index 6fd3f57..ecca1cd 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockInvoiceModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockInvoiceModule.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010-2011 Ning, Inc.
+ * Copyright 2010-2012 Ning, Inc.
  *
  * Ning licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
@@ -16,27 +16,28 @@
 
 package com.ning.billing.mock.glue;
 
+import org.mockito.Mockito;
+
 import com.google.inject.AbstractModule;
 import com.ning.billing.glue.InvoiceModule;
 import com.ning.billing.invoice.api.InvoiceMigrationApi;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.api.InvoiceUserApi;
-import com.ning.billing.mock.BrainDeadProxyFactory;
 
 public class MockInvoiceModule extends AbstractModule implements InvoiceModule {
     @Override
     public void installInvoiceUserApi() {
-        bind(InvoiceUserApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(InvoiceUserApi.class));
+        bind(InvoiceUserApi.class).toInstance(Mockito.mock(InvoiceUserApi.class));
     }
 
     @Override
     public void installInvoicePaymentApi() {
-        bind(InvoicePaymentApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(InvoicePaymentApi.class));
+        bind(InvoicePaymentApi.class).toInstance(Mockito.mock(InvoicePaymentApi.class));
     }
 
     @Override
     public void installInvoiceMigrationApi() {
-        bind(InvoiceMigrationApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(InvoiceMigrationApi.class));
+        bind(InvoiceMigrationApi.class).toInstance(Mockito.mock(InvoiceMigrationApi.class));
     }
 
     @Override
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
index 67769dd..fedd51e 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
@@ -16,19 +16,20 @@
 
 package com.ning.billing.mock.glue;
 
+import org.mockito.Mockito;
+
 import com.google.inject.AbstractModule;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.glue.JunctionModule;
 import com.ning.billing.junction.api.BillingApi;
 import com.ning.billing.junction.api.BlockingApi;
-import com.ning.billing.mock.BrainDeadProxyFactory;
 
 public class MockJunctionModule extends AbstractModule implements JunctionModule {
-    private final BillingApi billingApi = BrainDeadProxyFactory.createBrainDeadProxyFor(BillingApi.class);
-    private final BlockingApi blockingApi = BrainDeadProxyFactory.createBrainDeadProxyFor(BlockingApi.class);
-    private final AccountUserApi userApi = BrainDeadProxyFactory.createBrainDeadProxyFor(AccountUserApi.class);
-    private final EntitlementUserApi entUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementUserApi.class);
+    private final BillingApi billingApi = Mockito.mock(BillingApi.class);
+    private final BlockingApi blockingApi = Mockito.mock(BlockingApi.class);
+    private final AccountUserApi userApi = Mockito.mock(AccountUserApi.class);
+    private final EntitlementUserApi entUserApi = Mockito.mock(EntitlementUserApi.class);
 
     @Override
     protected void configure() {
@@ -43,7 +44,6 @@ public class MockJunctionModule extends AbstractModule implements JunctionModule
         bind(BillingApi.class).toInstance(billingApi);
     }
 
-
     @Override
     public void installAccountUserApi() {
         bind(AccountUserApi.class).toInstance(userApi);
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockOverdueModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockOverdueModule.java
index 7ab87d8..013005b 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockOverdueModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockOverdueModule.java
@@ -16,21 +16,20 @@
 
 package com.ning.billing.mock.glue;
 
+import org.mockito.Mockito;
+
 import com.google.inject.AbstractModule;
 import com.ning.billing.glue.OverdueModule;
-import com.ning.billing.mock.BrainDeadProxyFactory;
 import com.ning.billing.overdue.OverdueUserApi;
 
 public class MockOverdueModule extends AbstractModule implements OverdueModule {
-
     @Override
     public void installOverdueUserApi() {
-        bind(OverdueUserApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(OverdueUserApi.class));
+        bind(OverdueUserApi.class).toInstance(Mockito.mock(OverdueUserApi.class));
     }
 
     @Override
     protected void configure() {
         installOverdueUserApi();
     }
-
 }
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockPaymentModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockPaymentModule.java
index e974333..d2c7ddd 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockPaymentModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockPaymentModule.java
@@ -16,16 +16,14 @@
 
 package com.ning.billing.mock.glue;
 
+import org.mockito.Mockito;
+
 import com.google.inject.AbstractModule;
-import com.ning.billing.mock.BrainDeadProxyFactory;
 import com.ning.billing.payment.api.PaymentApi;
 
 public class MockPaymentModule extends AbstractModule {
-
     @Override
     protected void configure() {
-
-        bind(PaymentApi.class).toInstance(BrainDeadProxyFactory.createBrainDeadProxyFor(PaymentApi.class));
-
+        bind(PaymentApi.class).toInstance(Mockito.mock(PaymentApi.class));
     }
 }
diff --git a/util/src/test/java/com/ning/billing/mock/MockSubscription.java b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
index af6628d..2a3c024 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -21,6 +21,7 @@ import java.util.UUID;
 
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
 
 import com.google.common.collect.ImmutableList;
 import com.ning.billing.catalog.api.BillingPeriod;
@@ -64,7 +65,7 @@ public class MockSubscription implements Subscription {
         this.transitions = ImmutableList.<EffectiveSubscriptionEvent>of();
     }
 
-    Subscription sub = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+    Subscription sub = Mockito.mock(Subscription.class);
 
     @Override
     public boolean cancel(final DateTime requestedDate, final boolean eot, final CallContext context) throws EntitlementUserApiException {