|
From: Jeff M. <je...@cu...> - 2003-07-17 15:45:34
|
Maybe a slightly better example is what happens when you do this.
//test setup
setAttribute("att", null);
//actual code
if(getAttribute("wrong att")==null){
// do something
}
On Thu, 2003-07-17 at 16:34, Jeff Martin wrote:
> On Thu, 2003-07-17 at 16:06, Bill Lynch wrote:
> > Nat et al,
> >
> > Thanks for the advice - I can change that code (I'm new to the class). I
> > have a few more questions:
> >
> > 1) Why should I keep using a ReturnObjectBag as an internal object? In
> > my example, does it its use benefit me, or can I use it in a better way?
> Simplest (not best) example is this. How can you tell if your code is
> doing this.
>
> for(int i=0;i<100000;i++){
> att = request.getAttribute("name");
> }
>
> or this
>
> att = request.getAttribute("name");
>
> >
> > 2) If I shouldn't mess with the internal Hashtable, why is it exposed?
> > Seems like poor design then.
>
> Not bad design, just unusual environmental pressures, it's probably
> vestigial by now.
>
> >
> > 3) Any reason there's no Javadocs for any of these classes? :) Having
> > better documentation would have steered me away from using the internal
> > hashtable probably.
> >
>
> cough,
> http://mockobjects.sourceforge.net/javadoc/1.4/com/mockobjects/ReturnObjectBag.html
>
> >
> > Cheers,
> > --Bill
> >
> > Nat Pryce wrote:
> >
> > > Try using the putObjectToReturn and getNextReturnObject methods rather than
> > > messing around with the ReturnObjectBag's internal hash table.
> > >
> > > Cheers,
> > > Nat.
> > >
> > > ----- Original Message -----
> > > From: Bill Lynch
> > > To: <moc...@li...>
> > > Sent: Thursday, July 17, 2003 2:37 PM
> > > Subject: Re: [MO-java-users] setting attributes in a mock request
> > >
> > >>Guys,
> > >>
> > >>I took Steve's advice and created my own extention to
> > >>MockHttpServletRequest - my first attempt is below:
> > >>
> > >>private class MyMockHttpServletRequest extends MockHttpServletRequest {
> > >>
> > >> private Hashtable attributes;
> > >>
> > >> public JiveMockHttpServletRequest() {
> > >> attributes = new Hashtable();
> > >> }
> > >>
> > >> public Object getAttribute(String s) {
> > >> return attributes.get(s);
> > >> }
> > >>
> > >> public Enumeration getAttributeNames() {
> > >> return attributes.elements();
> > >> }
> > >>
> > >> public void setAttribute(String s, Object o) {
> > >> attributes.put(s,o);
> > >> }
> > >>}
> > >>
> > >>After doing this and reading Jeff's mail I implemented it with a
> > >>ReturnObjectBag - however, I don't see what that buys me:
> > >>
> > >>private class MyMockHttpServletRequest extends MockHttpServletRequest {
> > >>
> > >> private ReturnObjectBag attributes;
> > >>
> > >> public MyMockHttpServletRequest() {
> > >> attributes = new ReturnObjectBag("attributes");
> > >> }
> > >>
> > >> public Object getAttribute(String s) {
> > >> return attributes.getHashTable().get(s);
> > >> }
> > >>
> > >> public Enumeration getAttributeNames() {
> > >> return attributes.getHashTable().elements();
> > >> }
> > >>
> > >> public void setAttribute(String s, Object o) {
> > >> attributes.getHashTable().put(s,o);
> > >> }
> > >>}
> > >>
> > >>Is there a benefit to either approach? Both work perfectly in my test
> > >>case and I'm more inclined to go with the first approach just because
> > >>it's simpler (and the ReturnObjectBag does nothing for me in this case).
> > >>
> > >>Cheers,
> > >>--Bill
> > >>
> > >>Jeff Martin wrote:
> > >>
> > >>>Should probably be a ReturnObjectBag as this lets you setup a list of
> > >>>return values for a key.
> > >>>
> > >>>
> > >>>On Thu, 2003-07-17 at 08:47, Steve Freeman wrote:
> > >>>
> > >>>
> > >>>>This implementation /is/ a little hazy.
> > >>>>
> > >>>>The idea is that you should preload your attributes in the order in
> > >>>>which they are requested, and then they'll just be returned as the code
> > >>>>runs. It's not actually doing a lookup. Checking which attributes are
> > >>>>asked for is actually a separate concept and handled by a different
> > >>>>expectation. There are some arguments for doing this but it does look a
> > >>>>little clumsy.
> > >>>>
> > >>>>If you don't like this, I suggest you replace this part of the mock
> > >>>>request with an ExpectationMap which might be closer to the behaviour
> > >>>>you want.
> > >>>>
> > >>>>S.
> > >>>>
> > >>>>Bill Lynch wrote:
> > >>>>
> > >>>>
> > >>>>>All,
> > >>>>>
> > >>>>>I haven't been able to figure out how to set attributes in a
> > >>>>>MockHttpServletRequest. I searched the mailing list archives for clues,
> > >>>>>but didn't find any (and there's no javadocs for that class!).
> > >>>>>
> > >>>>>The method that looks like it might work only takes one param:
> > >>>>>
> > >>>>>request.setupGetAttribute(Object)
> > >>>>>
> > >>>>>I'd expect that to be
> > >>>>>
> > >>>>>request.setupGetAttribute(String, Object)
> > >>>>>
> > >>>>>I've also tried passing in a vector of name/value pairs to that method,
> > >>>>>but when I call getAttribute(String) on that request object I get this
> > >>>>>error:
> > >>>>>
> > >>>>>There was 1 failure:
> > >>>>>1)
> > >>
> > >>>>testGetAttribute(com.foo.util.MyTest)junit.framework.AssertionFailedError
> > >
> > > :
> > >
> > >>>>>attributes has run out of objects.
> > >>>>> at
> > >>
> > >>>>com.mockobjects.ReturnObjectList.nextReturnObject(ReturnObjectList.java:6
> > >
> > > 1)
> > >
> > >>>>> at
> > >>
> > >>>>com.mockobjects.servlet.MockHttpServletRequest.getAttribute(MockHttpServl
> > >
> > > etRequest.java:58)
> > >
> >
> >
> >
> > -------------------------------------------------------
> > This SF.net email is sponsored by: VM Ware
> > With VMware you can run multiple operating systems on a single machine.
> > WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
> > same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
> > _______________________________________________
> > Mockobjects-java-users mailing list
> > Moc...@li...
> > https://lists.sourceforge.net/lists/listinfo/mockobjects-java-users
--
Jeff Martin
Memetic Engineer
http://www.custommonkey.org/
|