IFileSystem seems lightweight and easy enough to get what you want. Despite not knowing the project, I can't see the addition of this causing issues...
Tim On Tue, Mar 24, 2009 at 3:37 PM, Chris Martin <[email protected]> wrote: > Maybe to abstract it away as IFileSystem? > Unfortunately, I really couldn't tell you the best way to do such a thing > without knowing your project. > > > On Tue, Mar 24, 2009 at 1:35 PM, Jake <[email protected]> wrote: > >> >> Ok, I understand that having FileExists as separate method is "code >> smell", but regardless of that if I need to test functionality that is >> depended on File.Exists (FileInfo.Exists is another alternative I've >> tried to use) how can you test that? >> >> On Mar 24, 4:31 pm, Chris Martin <[email protected]> wrote: >> > You really can't unless you completely mock every call in the chain. >> Which >> > would invalidate any test. >> > I'd take this as a sign that your design isn't sound. :( >> > >> > >> > >> > On Tue, Mar 24, 2009 at 12:57 PM, Jake <[email protected]> wrote: >> > >> > > So how can I mock that underlying object to test the functionality in >> > > ProcessItem? >> > >> > > On Mar 24, 3:39 pm, Chris Martin <[email protected]> wrote: >> > > > Looking under the hood, this is what I can determine: >> > > > MSTest is generating a proxy to the real object under test. It's >> only >> > > doing >> > > > this to be able to call the real object. Guess what? The real object >> in >> > > turn >> > > > calls FileExists, which isn't mocked. The result you're seing is the >> > > result >> > > > of File.Exists in Sys.IO. >> > >> > > > On Tue, Mar 24, 2009 at 12:33 PM, Jake <[email protected]> wrote: >> > >> > > > > ClassA_Accessor gets generated on runtime and makes otherwise >> "hidden" >> > > > > methods and members available for testing. And Yes it is used by >> > > > > MSTest only. >> > >> > > > > On Mar 24, 3:31 pm, Chris Martin <[email protected]> wrote: >> > > > > > What is ClassA_Accessor? >> > > > > > Is this some "trick" that MSTest relies on? >> > >> > > > > > On Tue, Mar 24, 2009 at 12:26 PM, Jake <[email protected]> >> wrote: >> > >> > > > > > > It's in Files in the RhinoMock Group (look on the right-side) >> > >> > > > > > > On Mar 24, 3:25 pm, Chris Martin <[email protected]> >> wrote: >> > > > > > > > Where is that zip file? >> > >> > > > > > > > On Tue, Mar 24, 2009 at 12:23 PM, Jake <[email protected]> >> > > wrote: >> > >> > > > > > > > > I uploaded ProtectedMethodCase.zip into files (It works in >> > > > > > > > > VisualStudio 2008 with Microsoft Test Framework). I >> implemented >> > > the >> > > > > > > > > test using the PartialMock as was suggested earlier. >> > >> > > > > > > > > On Mar 24, 3:20 pm, Tim Barcz <[email protected]> wrote: >> > > > > > > > > > It wasn't AAA, I was trying to clarify aruond >> PartialMock but >> > > I >> > > > > think >> > > > > > > I >> > > > > > > > > only >> > > > > > > > > > muddied the waters.... >> > >> > > > > > > > > > On Tue, Mar 24, 2009 at 2:19 PM, Tuna Toksoz < >> > > [email protected]> >> > > > > > > wrote: >> > > > > > > > > > > I didin't realize it was AAA syntax, because I saw >> > > ReplayAll, >> > > > > and >> > > > > > > > > though >> > > > > > > > > > > the record/replay mode. >> > >> > > > > > > > > > > Tuna Toksöz >> > > > > > > > > > > Eternal sunshine of the open source mind. >> > >> > > > > > > > > > >http://devlicio.us/blogs/tuna_toksoz >> > > > > > > > > > >http://tunatoksoz.com >> > > > > > > > > > >http://twitter.com/tehlike >> > >> > > > > > > > > > > On Tue, Mar 24, 2009 at 9:08 PM, Chris Martin < >> > > > > > > [email protected] >> > > > > > > > > >wrote: >> > >> > > > > > > > > > >> This won't even compile. >> > > > > > > > > > >> Your methods are protected. >> > >> > > > > > > > > > >> Change them to public and this following passes. >> > >> > > > > > > > > > >> --- >> > > > > > > > > > >> public class ClassA >> > > > > > > > > > >> { >> > > > > > > > > > >> public bool Success; >> > >> > > > > > > > > > >> public virtual bool FileExists(string >> filename) >> > > > > > > > > > >> { >> > > > > > > > > > >> return File.Exists(filename); >> > > > > > > > > > >> } >> > >> > > > > > > > > > >> public virtual void Process(string filename) >> > > > > > > > > > >> { >> > > > > > > > > > >> Success = FileExists(filename); >> > > > > > > > > > >> } >> > > > > > > > > > >> } >> > >> > > > > > > > > > >> [TestFixture] >> > > > > > > > > > >> public class Tests >> > > > > > > > > > >> { >> > > > > > > > > > >> [Test] >> > > > > > > > > > >> public void process_test() >> > > > > > > > > > >> { >> > > > > > > > > > >> var mocks = new MockRepository(); >> > >> > > > > > > > > > >> var a = mocks.PartialMock<ClassA>(); >> > >> > > > > Expect.Call(a.FileExists(null)).IgnoreArguments().Return(true); >> > > > > > > > > > >> mocks.ReplayAll(); >> > >> > > > > > > > > > >> a.Process("test.test"); >> > >> > > > > > > > > > >> Assert.AreEqual(a.Success, true); >> > > > > > > > > > >> } >> > > > > > > > > > >> } >> > >> > > > > > > > > > >> On Tue, Mar 24, 2009 at 10:50 AM, Jake < >> [email protected] >> > >> > > > > wrote: >> > >> > > > > > > > > > >>> Sorry, for this mistake, but method is virtual! >> > > > > > > > > > >>> Here is more info: >> > >> > > > > > > > > > >>> public class classA: baseClass >> > > > > > > > > > >>> { >> > >> > > > > > > > > > >>> public bool Success; >> > >> > > > > > > > > > >>> protected virtual bool FileExists(string fileName) >> > > > > > > > > > >>> { >> > > > > > > > > > >>> return File.Exists(fileName); >> > > > > > > > > > >>> } >> > >> > > > > > > > > > >>> protected virtual void Process(string fileName) >> > > > > > > > > > >>> { >> > > > > > > > > > >>> //Do something >> > > > > > > > > > >>> if(FileExists(fileName)) >> > > > > > > > > > >>> { >> > > > > > > > > > >>> Success = true; >> > > > > > > > > > >>> } >> > > > > > > > > > >>> else >> > > > > > > > > > >>> { >> > > > > > > > > > >>> Success = false; >> > > > > > > > > > >>> } >> > > > > > > > > > >>> } >> > > > > > > > > > >>> } >> > >> > > > > > > > > > >>> Unit test: >> > >> > > > > > > > > > >>> [TestMethod] >> > > > > > > > > > >>> public void ProcessTest() >> > > > > > > > > > >>> { >> > > > > > > > > > >>> var a = _mocks.StrickMock<baseClass>(); >> > >> > > > > > > >> Expect.Call(a.FileExists(null)).IgnoreArguments().Return(true); >> > > > > > > > > > >>> _mocks.ReplayAll(); >> > > > > > > > > > >>> a.Process("test.test"); //File doesn't exists >> > > > > > > > > > >>> Assert.AreEqual(true, a.Success); //Fails here >> > > > > > > > > > >>> } >> > >> > > > > > > > > > >>> On Mar 24, 1:39 pm, Alex McMahon < >> [email protected]> >> > > > > wrote: >> > > > > > > > > > >>> > Method2 must be a virtual method for RhinoMocks to >> be >> > > able >> > > > > to >> > > > > > > mock >> > > > > > > > > the >> > > > > > > > > > >>> > method with a PartialMock, >> > >> > > > > > > > > > >>> > On Tue, Mar 24, 2009 at 5:21 PM, Jake < >> > > [email protected]> >> > > > > > > wrote: >> > >> > > > > > > > > > >>> > > Ayende, >> > > > > > > > > > >>> > > I am trying to use Rhino Mocks in following >> scenario: >> > >> > > > > > > > > > >>> > > void classA.Method1() >> > > > > > > > > > >>> > > { >> > > > > > > > > > >>> > > //some stuff >> > > > > > > > > > >>> > > if(classA.Method2(var)) >> > > > > > > > > > >>> > > { >> > > > > > > > > > >>> > > //Do something >> > > > > > > > > > >>> > > } >> > > > > > > > > > >>> > > else >> > > > > > > > > > >>> > > { >> > > > > > > > > > >>> > > //Do something else >> > > > > > > > > > >>> > > } >> > > > > > > > > > >>> > > //some other stuff >> > > > > > > > > > >>> > > } >> > >> > > > > > > > > > >>> > > Now, I created partial mock for the class and >> set >> > > > > expectation >> > > > > > > for >> > > > > > > > > > >>> > > Method2 like so: >> > >> > > > > >> Expect.Call(classAMock.Method2(null)).IgnoreArguments().Return(true); >> > >> > > > > > > > > > >>> > > Real implementation of the method returns false. >> > >> > > > > > > > > > >>> > > When I execute the test it goes through the path >> when >> > > > > Method2 >> > > > > > > > > returns >> > > > > > > > > > >>> > > false. >> > >> > > > > > > > > > >>> > > How can that be? >> > >> > > > > > > > > > >> -- >> > >> > > > > > > > > > >> Charles Kettering - "My interest is in the future >> because >> > > I >> > > > > am >> > > > > > > going >> > > > > > > > > to >> > > > > > > > > > >> spend the rest of my life there." >> > >> > > > > > > > -- >> > >> > > > > > > > Isaac Asimov - "I do not fear computers. I fear the lack of >> > > them." >> > >> > > > > > -- >> > >> > > > > > Charles Kettering - "My interest is in the future because I am >> going >> > > to >> > > > > > spend the rest of my life there." >> > >> > > > -- >> > >> > > > Isaac Asimov - "I do not fear computers. I fear the lack of them." >> > >> > -- >> > >> > Isaac Asimov - "I do not fear computers. I fear the lack of them." >> >> > > > -- > > Fred Allen - "The first time I sang in the church choir; two hundred > people changed their religion." > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino.Mocks" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/RhinoMocks?hl=en -~----------~----~----~----~------~----~------~--~---
