Anyway what has brought this to a head is that I'm doing a service and it has a dependency on IConfiguration. I knew/know Rhino mocks has a recursive mocking ability so I thought I'd use that.
IConfiguration config = MockRepository.GenerateMock< IConfiguration>();
config.Stub(x => x.Data.OurApp. ConnectionString).Return(" SomeConnectionString");
Assert.AreEqual(" SomeConnectionString",config. Data.OurApp. ConnectionString);
This works as expected. However if you complicate it a little....
IConfiguration config = MockRepository.GenerateMock< IConfiguration>();
config.Stub(x => x.Data.OurApp. ConnectionString).Return(" SomeConnectionString");
config.Stub(x => x.Web.Sites.OurApp.Urls. ClientFiles).Return(new{new Uri("http://www.google.com"));
Assert.AreEqual(" SomeConnectionString",config. Data.OurApp. ConnectionString);
Assert.AreEqual("http://www. google.com",config.Web.Sites.OurApp.Urls.ClientFiles. ToString());
I start to have issues and I haven't been able to find a way to get it to let me set more then one property recursively.
I just started playing with NSubstitue. Here is the same stuff/more and it works as expected.
IConfiguration config = Substitute.For ();
config.Data.OurApp. ConnectionString.Returns(" asdf");
config.Data.OurApp2. ConnectionString.Returns(" sele");
config.Paths.PmtaDumpFolder. UncPath.Returns("uncpath");
config.Paths.PmtaDumpFolder. LocalPath.Returns("localpath") ;
config.Web.Sites.OurApp. Urls.ClientFiles.Returns(new Uri("http://www.google.com"));
Console.WriteLine(config. Data.OurApp. ConnectionString);
Console.WriteLine(config. Data.OurApp2. ConnectionString);
Console.WriteLine(config. Paths.PmtaDumpFolder.UncPath);
Console.WriteLine(config. Paths.PmtaDumpFolder. LocalPath);
Console.WriteLine(config.Web. Sites.OurApp.Urls. ClientFiles.ToString());
Thoughts feelings?
Looks much simpler.
ReplyDeleteIs this a legacy app you are working on? Have to do so much dotting smells a lot, keep things as simple as possible.
ReplyDeleteThe example was for a configuration object. I'll admit the configuration is a bit overerly complex. How would you recommend structuring a config object with dozens of entries? (Honest question)
ReplyDelete