views:

83

answers:

1

I've just started to explore BDD for my current project. I'm using moq with mspec to get nice test outputs. However, i can't find enough examples of what i'm trying to do, maybe i'm using the wrong approach or perhaps just don't understand the syntax enough, please advise.

The problem is i'm trying to verify whether a property has been set in a class. This property is a list of objects and i want to verify that each object has the same values as the expected object.

So given the initial premises

public class Data
{
    int a;      
}

public class DataViewer : IDataViewer
{
    public List<Data> dataList {get;set;}
}

public interface IDataViewer
{
    public List<Data> dataList {get;set;}
}

I'm using mspec and moq to do the following

class when_refreshing_data_list : Context
{
    Because .... = () =>
    {
        ....  // process the datalist
    }

    ThenIt should_set_the_data_list = () =>
    {
        List<DataList> expectedDataList = new List<DataList>();
        expectedDataList.add() // add some expected values to the datalist
        ...

        // problem is here in comparing two List<DataList>
        _mockDataViewer.VerifySet(f => f.dataList = expectedDataList)
    }
}

public abstract class Context
{
    Establish context = () =>
    {
         _mockDataViewer = new Mock<IDataViewer>();
    }
}

How would I perform this comparison? Can I use operator override? If yes, how? I've tried to put an expression body on the right side of the lambda only to be told that "a lambda expression with a statement body cannot be converted to an expression tree".

Any help appreciated :)

+1  A: 

Have you overloaded the equals method on the Data object?

public override bool Equals(object obj)
{
    if (((Data)obj).a.Equals(this.a))
        return true;

    return false;
}

This should get called automatically when you're comparing the dataList to its expectedDataList.

robbie
awesome! this worked!
Joe