I'm using a Windows TreeView which has a presenter for the tree itself (TreePresenter), plus a different presenter for each type of node (such as NodePresenter). The NodePresenter uses its reference to the TreePresenter to access the tree, so that it can add and delete its own type of nodes.
The following test instantiates a NodePresenter using a fake TreePresenter. Then the NodePresenter's AddNode method should add a node to the root of the tree by calling the TreeView.Nodes.Add method, but instead I get a message that the expected method was not called.
[Test]
public void AddNode()
{
TreePresenter treePresenter = Isolate.Fake.Instance<TreePresenter>();
NodePresenter nodePresenter = new NodePresenter( treePresenter );
Isolate.WhenCalled( () => nodePresenter.TreePresenter.Tree.Nodes.Add( "name" ) ).
WillReturn( new TreeNode() );
nodePresenter.AddNode();
Isolate.Verify.WasCalledWithAnyArguments( () =>
nodePresenter.TreePresenter.Tree.Nodes.Add( "name" ) );
}
Here's the code for the Node and Tree presenters.
public class NodePresenter
{
private TreePresenter _treePresenter;
public NodePresenter( TreePresenter treePresenter )
{
_treePresenter = treePresenter;
}
public TreePresenter TreePresenter
{
get { return _treePresenter; }
}
public void AddNode()
{
TreeNode systemNode = _treePresenter.Tree.Nodes.Add( "name" );
}
}
public interface ITreeView
{
TreeView TreeView { get; set; }
}
public class TreePresenter
{
ITreeView _view;
NodePresenter _nodePresenter;
public TreePresenter( ITreeView view )
{
_view = view;
_nodePresenter = new NodePresenter( this );
}
public TreeView Tree
{
get { return _view.TreeView; }
}
public void Run()
{
_nodePresenter.AddNode();
}
}
:(