This feature is dangerous!

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:37 PM, Tim Barcz <[email protected]> wrote:

> I was able to get this to by changing the scope of some of the methods.  I
> don't get (or trust) ClassA_Accessor...if given the choice I would recommend
> you use NUnit or MbUnit as your test framework and NOT MSTest (for reasons
> such as what we're seeing here).
>
> [TestMethod]
> public void TestMethod1()
> {
>     MockRepository _mocks = new MockRepository();
>     ClassA _classMock = _mocks.PartialMock<ClassA>();
>
>
> Expect.Call(_classMock.FileExists(null)).IgnoreArguments().Return(true);
>
>     _mocks.ReplayAll();
>
>     _classMock.ProcessItem(1);
>     Assert.AreEqual(true, _classMock.Success);
> }
>
> public abstract class baseClass
> {
>     public void Start()
>     {
>         for (int i = 0; i < 10; i++)
>         {
>             ProcessItem(i);
>         }
>     }
>
>     public abstract void ProcessItem(int i);
> }
>
> public class ClassA: baseClass
> {
>
>     public bool Success;
>
>     public virtual bool FileExists(string fileName)
>     {
>         return File.Exists(fileName);
>     }
>
>     public override void ProcessItem(int i)
>     {
>         string fileName = "test " + i.ToString() + ".test";
>         Success = FileExists(fileName);
>
>     }
> }
>
> On Tue, Mar 24, 2009 at 2:33 PM, Tuna Toksoz <[email protected]> wrote:
>
>> Same here, couldn't find the class file.
>>
>> 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: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."
>>>
>>>
>>>
>>
>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to