I have a Currency class which I persist to my database using NHibernate. Currency class looks like this:
public class Currency : Entity
{
public virtual string Code { get; set; }
public virtual string Name { get; set; }
public virtual string Symbol { get; set; }
}
I have written a unit test using [TestCase] like this:
[TestCase(6,Result = new Currency ({ Code="GBP", Name="British Pound", Symbol="£"}))]
public Currency CanGetCurrencyById(int id)
{
ICurrencyRepo currencies = new RepoFactory().CreateCurrencyRepo(_session);
Currency c = currencies.GetById<Currency>(id);
return c;
}
I know this is wrong but I’m not sure how to write it. Can the result be an object?
Attribute argument (for
Result) must be a constant expression. You can’t create objects like you do now.Using
TestCaseattribute is good for testing cases where you need to verify multiple simple inputs/outputs. In your scenarion, you can however do something like this (that is, if you only plan to verify whether id-code mapping is correct):Also, take a look at
TestCasedocumentation – they provide quite good examples.Edit:
By mapping testing I meant verifying whether your ORM mappings (NHibernate to database) are correct and work as you intended. You usually test that in following scenario:
Currency)Save+Flush+Evictcombination to ensure NHibernate doesn’t store saved entity in cache anymore)If such test then passes, it more or less tells you that I can save this entity with those values, and I can then retrieved it with the exactly same values. And that’s all you wanted to know – mappings are correct.
With
TestCaseattribute tho, verifying correctness of entire objects is quite difficult – it’s meant to test simple stuff. You can use workarounds like suggested in other answer (passing arguments viaTestCase) but it quickly becomes unreadable and hard to maintain (imagine entity with 6+ properties to verify).I suggest splitting your test into one that verifies whether mapping of
idtocodeis correct (however I see little point in doing that, unless you always plan to have certain ids mapped to certain codes) and other one verifying whetherCurrencyentity is properly mapped to database table.