killbill-memoizeit

invoice: switch from BrainDeadProxyFactory to Mockito in

7/7/2012 1:32:17 AM

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 f1f7614..c4bcc5a 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() {
 
@@ -144,9 +144,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);
@@ -162,7 +162,6 @@ public class TestNextBillingDateNotifier {
         helper.initDb(testDdl);
     }
 
-
     @Test(enabled = true, groups = "slow")
     public void testInvoiceNotifier() throws Exception {
         final UUID subscriptionId = new UUID(0L, 1L);
@@ -174,7 +173,6 @@ public class TestNextBillingDateNotifier {
         notifier.initialize();
         notifier.start();
 
-
         dao.inTransaction(new Transaction<Void, DummySqlTest>() {
             @Override
             public Void inTransaction(final DummySqlTest transactional,
@@ -185,11 +183,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;