c# - NUnit Has.Member fails when checking for object -


i have following nunit test:

[test]     public void getcomplexrulestestcontents()     {         var _rule = new ruleviewmodel(null, "third rule", "description");         var result = _complexrulesservice.getcomplexrules();          assert.that(result, has.member(_rule));      } 

the code called _complexrulesservice.getcomplexrules() is:

public ienumerable<iruleviewmodel> getcomplexrules()     {          ienumerable<ruleviewmodel> _rules;         _rules = new list<ruleviewmodel>                      {                          new ruleviewmodel(null, "first default rule", "description"),                          new ruleviewmodel(null, "second default rule", "description"),                          new ruleviewmodel(null, "third rule", "description")                      };         return _rules;     } 

the error message is:

pl.web.mvc.rules.tests.complexrulesservicetests.getcomplexrulestestcontents: expected: collection containing <pl.web.mvc.models.rules.ruleviewmodel> was:  < <pl.web.mvc.models.rules.ruleviewmodel>, pl.web.mvc.models.rules.ruleviewmodel>, <pl.web.mvc.models.rules.ruleviewmodel> > 

i have tried tests http://www.nunit.org/index.php?p=collectionconstraints&r=2.5.5 , pass.

what i'm doing wrong?

thanks in advance!

has.member uses object equality verify whether collection contains item:

for references, has.member uses object equality find member in collection.

what means is, classes compared equality using default equality comparision, (unless override it) object reference equality. , 4 different instances.

you can perform simple predicate matching bit of linq solve problem:

var expecteditem = results.firstordefault(vm => vm.property1 == null     && vm.name == "third rule" && vm.description == "description"); assert.that(expecteditem, is.not.null); 

or, make more neat can add custom equality comparison method tests class , use predicate matching bit more fluency:

private bool rulesmatch(ruleviewmodel actual, ruleviewmodel expected) {     return actual.property1 == expected.property1         && actual.name == expected.name         && actual.description == expected.description; }  assert.that(results, has.some.matches<ruleviewmodel>(v => rulesmatch(v, _rule))); 

Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -