code: function (fn, factory) {
  
  	if (!(this instanceof WrapSilent)) {
  		return new WrapSilent(fn, factory);
  	}
  	if (!(factory instanceof AbstractFactory)) {
  		throw new ValidationError('need factory to be instanceof AbstractFactory');
  	}
  
  
  	/**
  	 * Factory instance of AbstractFactory class
  	 *
  	 * @property Factory
  	 * @type {AbstractFactory}
  	 */
  	this.Factory = factory;
  	/**
  	 * Producer new instance of tap.Producer
  	 *
  	 * @property Producer
  	 * @type Tap.Producer
  	 */
  	this.Producer = this.Factory.getFactory('TapProducer');
  	/**
  	 * test helper function passed as param, now bound to WrapSilent context
  	 *
  	 * @property test
  	 * @type {Function}
  	 */
  	this.test = fn.bind(this);
  
  	return _(this).bindAll('end', 'silence', 'writeStream');
  }
docs: ##### Prevents node-tap harness from writing output to STDOUT
  - Creates a new stream that returns summary of results in JSON so can access programmatically
  - Good for testing test helpers -> eg used in unit tests for [tap-test-helpers](https://npmjs.org/package/tap-test-helpers) module
  > so can do fn.Producer.on('end', fn (results))
  
  @class WrapSilent
  @constructor
  @extends {Wrap}
  
  @param {Function} test helper function which contains tap.test() function
  @param {AbstractFactory} tp instance of tap.Producer stream
  @return {Function} returns original function bound to new context