|
Testing in isolation of Mock Objects: write focused tests that test only a single method, without side effects resulting from other objects relative. A simple example: Account Manager Problem(based on a Database environment) 
Application analysis: class Account--two attributes: accountId and balance. Three methods: debit(-), credit(+), getBalance--quite simple and not related to other object or enrionment. class AccountManager--Manage Account, default connect DB to get data from it. Two methods: findAccountForUser and updateAccount. Closely related to object Account and enrionment DataBase.--must be mocked to fit for unit-test. class AccountService--one attributes: accountManager which you can confige by yourself. Two methods: setAccountManager and transfer.--This is the class we want to test. The transfer method will be testd with class MockAccountManage which implements AccountManager to let the unit-test run easily. In the real way, solid class which implements AccountManager may connect to a database to gain the data requested. With the MockAccoundManager which tester created to replaced the default behavier of AccounManager, under your control, we can test AccountService singly. src: http://blog.chinaunix.net/resserver.php?blogId=8755&resource=junit71.txt import junit.framework.TestCase;public class TestAccountService extends TestCase { public void testTransferOK() { MockAccountManager mockAccountManager = new MockAccountManager(); Account senderAccount = new Account("1", 200); Account beneficiaryAccount = new Account("2", 100); mockAccountManager.addAccount("1", senderAccount); mockAccountManager.addAccount("2", beneficiaryAccount); AccountService accountService = new AccountService(); accountService.setAccountManager(mockAccountManager); accountService.transfer("1", "2", 50); assertEquals(150, senderAccount.getBalance()); assertEquals(150, beneficiaryAccount.getBalance()); } }
|