Hi Xerxes,
Looks like Rhino Mocks is comparing the contents of the enumerable
arguments to establish equality (I had a similar-ish problem with
NUnit assertions, outlined here [1]).
You can get your tests to pass by making Rhino Mocks compare object
references instead:
[Test]
public void ShouldPerformActionOnList1()
{
_mockActor.AssertWasCalled(x =>
x.PerformAction(Arg<List<int>>.Is.Same(_list1)));
}
[Test]
public void ShouldPerformActionOnList2()
{
_mockActor.AssertWasCalled(x =>
x.PerformAction(Arg<List<int>>.Is.Same(_list2)));
}
Cheers,
Dave
[1]
http://www.davesquared.net/2009/04/explicitly-test-what-you-are-trying-to.html
On Mon, Jun 1, 2009 at 4:55 PM, Xerxesb<[email protected]> wrote:
>
> Hi there,
>
> I've tried Googling this but turned up no results - was hoping I could
> get some guidance from the list. Basically i've got a class which has
> an expectation that AssertWasCalled on a method which takes in a List
> as a parameter. If i call it twice with two new'ed up lists, the
> framework fails the assertion citing "Expected #1, Actual #2".
>
> I've devised the following test-case to reproduce the situation:
> /************/
> using System.Collections.Generic;
> using NUnit.Framework;
> using Rhino.Mocks;
>
> namespace Test
> {
> [TestFixture]
> public class ATest
> {
> private IActor _mockActor;
> private Manager _manager;
> private List<int> _list1, _list2;
>
> [SetUp]
> public void SetUp()
> {
> _list1 = new List<int>();
> // _list1.Add(0);
> _list2 = new List<int>();
>
> _mockActor = MockRepository.GenerateMock<IActor>();
>
> _manager = new Manager(_mockActor);
> _manager.DoItOnActor(_list1);
> _manager.DoItOnActor(_list2);
> }
>
> [Test]
> public void ShouldPerformActionOnList1()
> {
> _mockActor.AssertWasCalled(x => x.PerformAction(_list1));
> }
>
> [Test]
> public void ShouldPerformActionOnList2()
> {
> _mockActor.AssertWasCalled(x => x.PerformAction(_list2));
> }
> }
>
> public interface IActor
> {
> void PerformAction(List<int> list);
> }
>
> public class Manager
> {
> private readonly IActor _actor;
>
> public Manager(IActor actor)
> {
> _actor = actor;
> }
>
> public void DoItOnActor(List<int> dataForActor)
> {
> _actor.PerformAction(dataForActor);
> }
> }
> }
>
> /***********/
>
> If I uncomment the second line in the set-up, Rhino seems to treat the
> lists differently and the expectations pass. However, because they are
> different lists (they just happen to both be empty in this scenario),
> I believe I should be able to call them like that and the scenario
> should pass. Any hints?
>
> Thanks,
> Xerx
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Rhino.Mocks" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/RhinoMocks?hl=en
-~----------~----~----~----~------~----~------~--~---