chevron-thin-right chevron-thin-left brand cancel-circle search youtube-icon google-plus-icon linkedin-icon facebook-icon twitter-icon toolbox download check linkedin phone twitter-old google-plus facebook profile-male chat calendar profile-male
0 votes
I am using MEF to resolve the requied Implementation. :)

Following is the Factory class which resolves the required implementaion. Static method "GetLocalisationProviderInstance()" get a appropriate implementaion.

Do I really need to test this? :?
How do I unit test this using typemock? :(

public class LocalisationProviderFactory
Lazy<ILocalisation, IDictionary<string>>[] LocalisationMainService { get; set; }

public LocalisationProviderFactory()
var Catalog = new AggregateCatalog();
Catalog.Catalogs.Add(new DirectoryCatalog(@".Extensions"));
var Container = new CompositionContainer(Catalog);

public virtual List<ILocalisation> GetLocalisationService(string Type)
List<ILocalisation> FilteredLocalisationService = new List<ILocalisation>();
foreach (var LocalisationObj in LocalisationMainService)
if (LocalisationObj.Metadata["Type"].ToString().ToUpper() == Type)
return FilteredLocalisationService;

public static ILocalisation GetLocalisationProviderInstance()
string Option = ConfigurationSettings.AppSettings["LocalisationProviderName"].ToString();

LocalisationProviderFactory CF = new LocalisationProviderFactory();
List<ILocalisation> objLocalisation = CF.GetLocalisationService(Option.ToUpper());
if (objLocalisation.Count == 0)
//No Implementation Found
return null;
return (ILocalisation)objLocalisation[0];

asked by sudhir (3.5k points)

2 Answers

0 votes
Hi Sudhir,

This is an interesting question. The case is an external dependency in the ILocalisation dictionary, which is provided by MEF, rather than by a standard function call or constructor. When testing the factory method we would of course like to isolate this dependency in MEF. I would try to fake the getter of the LocalisationMainService property to return a dictionary with test data, instead of trusting MEF to return it. Something like:
// create test data according to what you would like to test
var localisation1 = ...
var localisation2 = ...

// create the object under test. Because we are testing an instance method on a factory class, you can inject the object under test using Swap.NextInstance:
var factoryUnderTest = new LocalisationProviderFactory();
// return the test data instead of the MEF import
Isolate.WhenCalled(() => factoryUnderTest.LocalisationMainService).WillReturn(new[] {localisation1, localisation2});

// call the method under test

// assert results according to test data/requirements

Hope this helps!

Typemock Support
answered by doron (17.2k points)
0 votes
Thanks doron. This wil help. 8)
answered by sudhir (3.5k points)