Dangerous is an understatement.

On Tue, Mar 24, 2009 at 12:40 PM, Tim Barcz <[email protected]> wrote:

> Can someone with some knowledge of MSTest explain to me what is going on
> here?  I think if possible we need to figure out if this is an MSTest issue
> or Rhino issue.  If it is the latter, I'd like to fix.
>
>
> On Tue, Mar 24, 2009 at 2:38 PM, Tuna Toksoz <[email protected]> wrote:
>
>> 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."
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
> >
>


-- 

George Burns  - "Don't stay in bed, unless you can make money in bed."

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