Print
DelegationTestExample

Delegation can be tested in PicoUnit quite succintly using the 'DelegateVerify' interface, using this interface you can specify that delegation takes place in one line of code:

public void testDelegatorDelegatesSomeMethod(DelegateVerify should) {
	should.delegateTo(delegate.someMethod()).whenCalling(delegator.someMethod());
}

Here's a full example involving a delegating implementation of Database

package example.delegate;

import example.model.Database;
import picounit.DelegateVerify;
import picounit.Test;

public class DelegatingDatabaseTest implements Test {
	private Database delegate;
	private DelegatingDatabase delegatingDatabase;

	public void mock(Database delegate) {
		this.delegatingDatabase = new DelegatingDatabase(delegate);
		
		this.delegate = delegate;
	}
	
	public void testDelegatesIsConnected(DelegateVerify should) {
		should.delegateTo(delegate.isConnected())
			.whenCalling(delegatingDatabase.isConnected());
	}
	
	public void testDelegatesQueryCount(DelegateVerify should) {
		should.delegateTo(delegate.queryCount("queryCountSql"))
			.whenCalling(delegatingDatabase.queryCount("queryCountSql"));
	}
	
	public void testDelegatesInsert(DelegateVerify should) {
		should.delegateTo(delegate.insert("insertSql"))
			.whenCalling(delegatingDatabase.insert("insertSql"));
	}
}
public class DelegatingDatabase implements Database {
	private final Database delegate;

	public DelegatingDatabase(Database delegate) {
		this.delegate = delegate;
	}

	public boolean isConnected() {
		return delegate.isConnected();
	}

	public int queryCount(String queryCountSql) {
		return delegate.queryCount(queryCountSql);
	}

	public boolean insert(String insertSql) {
		return delegate.insert(insertSql);
	}
}
Powered by Atlassian Confluence