C# 3.5: Generics, polymorfi, NUnit test, Rhino mocks
Jeg har en række entities (customer, product etc), hvoraf nogen bruger lazyload. Entities hentes og gemmes via en mindre række businessklasser, der alle nedarver fra en generic interface: IBaseBusiness<T>Mit problem er nu unittest (jeg bruger NUnit og Rhino mocks)
Jeg vil gerne lave en testfixture pr entity som benytter sig af en fælles basisklasse. For hver property, der er lazyloaded, skal jeg så teste om den bliver loaded korrekt og hertil skal jeg sætte expects op på mine business klasser. Men det har jeg svært ved.
Her er et eksempel
[TestFixture]
CompanyEntityTest : LazyLoadTest
{
protected overwrite object GetBusinessObject(Type theType)
{
if (Type == typeof(Group)
return ServiceFacace.GroupBusiness;
}
}
LazyLoadTest
{
protected abstract object GetBusinessObject(Type theType);
[Test, TestCaseSource="PropertyDataSource"]
public void TestLazyLoad(string propertyName, string idPropertyName)
{
PropertyInfo property = ...
PropertyInfo idproperty = ...
...
object business = this.GetBusinessObject(property, idproperty);
business.Expect(b => b.GetObject(0)).Return(newValue).IgnoreArguments();
}
}
Mit problem er at typen object ikke indeholder metoden GetObject(), så den her vil ikke kompilere. Og jeg kan ikke sende IBaseBusiness<T> tilbage som retur-parameter fra GetBusinessObject da jeg ikke på compiletime ved hvad T er.
Findes der en måde at få en variabel som Type type sat ind som T ?
Findes der en måde at sætte expect op på et object selvom den ikke umiddelbart indeholder metoden? Jeg bruger C# 3.5 så jeg kan ikke bruge nøgleordet dynamic.