moq: How do I setup behaviour of constructor in generated proxy?

I have an abstract class (let's call it AbstractOutputter). When I derive from it, I make calls to a protected method in the constructor of the derived class.

AbstractOutputter

public abstract class IOutputter<T>
{
  protected void Write(Func<T, string> output)
  {
   ... 
  }
}

Derived class

public class WotsitOutputter: AbstractOutputter<Wotsit>
{
  public WotsitOutputter()
  {
    Write(x => x.Property1.ToString());
    Write(x => x.Property2.ToString());
  }
}

The pattern is identical to creating validator classes in FluentValidation:

http://fluentvalidation.codeplex.com/

I would like Moq to create me a class deriving from AbstractOutputter, in order to unit test how it responds to various permutations of calls to Write().. I would need to do something like this:

Mock<AbstractOutputter<Wotsit>> mockOutputter = new Mock<AbstractOutputter<Wotsit>>();
// Instruct Moq to make various calls to protected method in constructor of mock class

Is it possible to do this? Can I somehow tell Moq to perform certain actions within the constructor of the proxy it creates? Or will I need to define real classes extending AbstractOutputter just for unit testing?

Answers


I'm going to put this to bed: I conclude that Moq cannot do this.

In the end I just defined some simple implementations of AbstractOutputter<Wotsit> for the purpose of testing.


Need Your Help

Cordova + XCTest results in 'Undefined symbols for architecture i386'

cordova i386 xctest

I'm getting an error when I try to integrate XCTest with a Cordova project. It happens in a fresh cordova app, no customizations. Just add XCTest and tests fail with the following errors:

CGContextDrawImage + CGContextClipToMask performance

iphone ios ipad core-graphics quartz-graphics

I am using CGContextDrawImage and am not happy with the performance.